我正在尝试检查包含特定模式的元素中的值。 例如,我有以下一些元素:
<message>
<locnr>A001</locnr>
<locnr>K301</locnr>
<locnr>Z310</locnr>
<locnr>B311</locnr>
</message>
我想找出至少有1个locnr元素:
在上面的示例中,由于locnr的值为'A001',因此消息通过测试的文件。
答案 0 :(得分:2)
如果您的XPath处理器支持XPath 2.0,请使用正则表达式。
/message[locnr[matches(., '^[AC][012]')]]
答案 1 :(得分:1)
以下XPath表达式应该执行您想要的操作:
message[substring(locnr,1,1)='A' or substring(locnr,1,1)='C']
[substring(locnr,2,1)="0" or substring(locnr,2,1)="1" or substring(locnr,2,1)="2"]
答案 2 :(得分:0)
试试这个:
//message
[
count(locnr[starts-with(text(),'A') or starts-with(locnr/text(),'C')])>0
and
substring(locnr/text(),2,1) = '0'
or
substring(locnr/text(),2,1) = '1'
or
substring(locnr/text(),2,1) = '2'
]
答案 3 :(得分:-2)
在我最近使用XPath和XML文档的经历中,我发现XPath表达式更多地设计用于帮助定位特定节点,而不是分析其中保存的值。当然你可以根据值过滤返回的节点,但我相信(有人纠正我,如果我错了),它只限于简单相等或大于/小于数值。这是通过如下声明完成的:
/书店/书[价格&gt; 35.00]
直接来自W3学校的XPath语法页面,并且会返回价值超过35的价格儿童的图书元素。
如果我在你的位置,我可能会使用XPath来获取XPath中的所有locnr元素,只需“locnr”,然后在返回的节点列表中运行循环。对于每个节点,您可以通过我找到的两种方式获取字符串的值。如果您知道该元素是一个叶子,则.text将起作用,但如果它可能不会那么注意,因为.text返回节点及其后代的所有值。另一种方法是访问节点的第一个子节点的nodeValue。类似的东西:
currentNode.childNodes [0] .nodeValue
只需使用字符串方法来提取您感兴趣的字符,并为您的模式提供条件。