我有以下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\‘时,它返回相同的错误,替换为双引号\"NationalId\“编译,但是没有找到正确的决定"4”,而是得到[]
我正在使用SoapUI,它是Groovy脚本语言来读取xml。
我该怎么搜索这条线?
发布于 2014-11-07 20:42:48
您的XPath不正确地括了引号。你可能是说:
//Reasons/Reason[Element="IdentityDocument[@TypeOfDocument='NationalId']/Number"]/Decision还可以使用contains()函数,如下所示:
//Reason[Element[contains(., 'IdentityDocument')]]/Decision发布于 2014-11-07 17:58:47
您应该将原始xpath引用放在一个元素中,包括它作为CDATA。这样,解析器就会忽略它,您的路径将是有效的。
示例:
<Reason>
<Element><![CDATA[IdentityDocument[@TypeOfDocument='NationalId']/Number]]></Element>
<Decision>4</Decision>
</Reason>https://stackoverflow.com/questions/26807098
复制相似问题