Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
基于包含路径数据的内容搜索xml元素_Xml_Xpath_Groovy_Soapui - Fatal编程技术网

基于包含路径数据的内容搜索xml元素

基于包含路径数据的内容搜索xml元素,xml,xpath,groovy,soapui,Xml,Xpath,Groovy,Soapui,我有以下xml: <Summary> <Decision>-1</Decision> <Reasons> <Reason> <Element>Address/Postcode</Element> <Decision>1</Decision> </Reason> <Reason> <Element>Na

我有以下xml:

<Summary>
<Decision>-1</Decision>
<Reasons>
   <Reason>
      <Element>Address/Postcode</Element>
      <Decision>1</Decision>
   </Reason>
   <Reason>
      <Element>Name/Firstname</Element>
      <Decision>13</Decision>
   </Reason>
   <Reason>
      <Element>Name/Lastname</Element>
      <Decision>1</Decision>
   </Reason>
   <Reason>
      <Element>IdentityDocument[@TypeOfDocument='NationalId']/Number</Element>
      <Decision>4</Decision>
   </Reason>
   <Reason>
      <Element>DOB</Element>
      <Decision>17</Decision>
   </Reason>
</Reasons>   
</Summary>
但我在尝试获取身份证明文件时失败:

//Reasons/Reason[Element='IdentityDocument[@TypeOfDocument='NationalId']/Number']/Decision

Error
net.sf.saxon.trans.XPathException: XPath syntax error at char 125 in {...Document='NationalId']/Numb...}: expected "]", found name "NationalId"
当我尝试转义'NationalId'时,它返回相同的错误 用双引号“NationalId”替换编译,但不是找到正确的决策“4”,而是得到[]

我正在使用SoapUI和它的Groovy脚本语言来读取xml


如何搜索此行?

您应该将原始xpath引用放在包含它的元素中。这样,解析器将忽略它,并且您的路径将是有效的

例如:

<Reason>
   <Element><![CDATA[IdentityDocument[@TypeOfDocument='NationalId']/Number]]></Element>
   <Decision>4</Decision>
</Reason>

4.

您的XPath包含的引号不正确。你可能是说:

//Reasons/Reason[Element="IdentityDocument[@TypeOfDocument='NationalId']/Number"]/Decision
您还可以使用
contains()
函数,如下所示:

//Reason[Element[contains(., 'IdentityDocument')]]/Decision
//Reason[Element[contains(., 'IdentityDocument')]]/Decision