String 检查是否至少有1个节点值与特定模式匹配
我试图检查包含特定模式的元素中的值。 例如,我有以下一些元素:String 检查是否至少有1个节点值与特定模式匹配,string,xpath,compare,String,Xpath,Compare,我试图检查包含特定模式的元素中的值。 例如,我有以下一些元素: A001 K301 Z310 B311 我想知道是否至少有一个locnr元素: 以'A'/'C'开头 第二个字符是'0'/'1'/'2' 在上面的示例中,由于locnr的值为“A001”,因此消息的文件通过了测试。以下XPath表达式应满足您的要求: message[substring(locnr,1,1)='A' or substring(locnr,1,1)='C'] [substring(locnr,2,
A001
K301
Z310
B311
我想知道是否至少有一个locnr元素:- 以'A'/'C'开头
- 第二个字符是'0'/'1'/'2'李>
在上面的示例中,由于locnr的值为“A001”,因此消息的文件通过了测试。以下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"]
在我最近使用XPath和XML文档的经验中,我发现XPath表达式更适合于帮助定位特定节点,而不是分析节点中的值。当然,您可以根据值筛选返回的节点,但我相信(如果我错了,有人会纠正我),它仅限于简单的相等或大于/小于数值。这是通过以下语句完成的: /书店/书籍[价格>35.00] 它直接来自W3学校的XPath语法页面,将返回包含price children且其值大于35的book元素 如果我处在您的位置,我可能会使用XPath获取所有的locnr元素,XPath只是“locnr”,然后在返回的节点列表中运行一个循环。对于每个节点,您可以通过我发现的两种方式获得字符串的值。如果知道元素是叶,则.text将起作用,但如果可能不起作用,则要小心,因为.text返回节点及其子体的所有值。另一种方法是访问节点的第一个子节点的nodeValue。比如: currentNode.childNodes[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'
]
如果您的XPath处理器支持XPath2.0,请为此使用正则表达式
/message[locnr[matches(., '^[AC][012]')]]