XPath - 在具有相同名称的XML文档中搜索字符串

时间:2015-04-08 16:25:14

标签: xml xpath

XPath noob再次来到这里。我从Web服务器获得此响应。如您所见,所有元素都是真实的。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com">
   <soapenv:Header>
      <LimitInfoHeader>
         <limitInfo>
            <current>284</current>
            <limit>5000000</limit>
            <type>API REQUESTS</type>
         </limitInfo>
      </LimitInfoHeader>
   </soapenv:Header>
   <soapenv:Body>
      <createResponse>
         <result>
            <id>a05e00000042oZ1AAI</id>
            <success>true</success>
         </result>
         <result>
            <id>a06e0000008TWdlAAG</id>
            <success>true</success>
         </result>
         <result>
            <id>a06e0000008TWdmAAG</id>
            <success>true</success>
         </result>
      </createResponse>
   </soapenv:Body>
</soapenv:Envelope>

我的问题是,如何编写一个函数,如果一个或多个成功变量为false,将返回一个布尔变量。有点像AND门。

我目前有:

//[contains(text(),'false')])

但这总是会返回false。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您需要考虑本文档中的名称空间。但暂时忽略名称空间问题,

not(//*[local-name() = 'success'] = 'false')

是一个返回布尔值的XPath表达式。如果输入文档中的没有 true元素且文本内容为success,则返回false。只要有一个看起来像

的元素
<success>false</success>

路径表达式返回false

如果您打算测试反向条件,即如果至少有一个true则返回<success>false</success>,请使用

//*[local-name() = 'success'] = 'false'

考虑一个名称空间意味着使用您正在使用的编程语言重新声明,并在XPath表达式中为元素名称添加前缀。