基于具有路径数据的内容搜索xml元素

时间:2014-11-07 17:51:26

标签: xml xpath groovy soapui

我有以下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='Name/Firstname']/Decision

但是我在尝试获取IdentityDocument时失败了:

//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 \&#39;它返回相同的错误 用双引号代替\&#34; NationalId \&#34;编译而不是找到正确的决定&#34; 4&#34;得到[]

我使用SoapUI及其Groovy脚本语言来读取xml。

如何搜索此行?

2 个答案:

答案 0 :(得分:1)

您的XPath包含错误的引号。你可能意味着:

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

您也可以使用contains()功能,如下所示:

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

答案 1 :(得分:0)

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

示例:

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