Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 检查是否至少有1个节点值与特定模式匹配_String_Xpath_Compare - Fatal编程技术网

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]')]]