使用XPath1.0从XML中筛选PerComp≠100的任务名并逗号分隔输出是否可行?
结论
可以实现,但纯单条XPath 1.0语句无法直接输出逗号分隔的字符串,需要结合你使用的解析工具/宿主语言的逻辑配合完成。
第一步:筛选符合条件的Name值
你可以先用以下XPath 1.0语句筛选出所有PerComp不等于100的Task节点的Name文本:
//Task[PerComp != 100]/Name/text()
执行该语句会得到一个文本节点集合,针对你给出的示例XML,返回结果为两个文本节点:Entertainment、Movie。
第二步:拼接为逗号分隔格式
XPath 1.0没有内置的批量字符串拼接函数,仅有的concat()函数只能接收固定数量的参数,无法适配节点数量不确定的场景。你可以用解析工具自带的能力直接拼接节点集合:
- 若使用Python lxml库:拿到XPath返回的节点列表后直接调用
join方法即可res = ', '.join([node.text for node in root.xpath("//Task[PerComp != 100]/Name")]) - 若使用XSLT 1.0:可以遍历筛选出的节点,逐个追加字符串和分隔符即可实现输出。
如果你的环境支持XPath 2.0及以上版本,直接用单条语句即可输出目标格式:
string-join(//Task[PerComp != 100]/Name, ', ')
内容的提问来源于stack exchange,提问作者Riyas Hussain
相关产品推荐
相关产品推荐

