我有以下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。
如何搜索此行?
答案 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>