使用XPATH选择XML Element值

时间:2015-03-27 12:22:42

标签: xml xpath

当天的问候。

我想在特定条件匹配时选择特定元素值。

这是我的代码:

<root>
  <companies>
    <company id="6">Tata Consultancy Services</company>
    <company id="7">Wipro</company>
    <company id="8">Infosys</company>
    <company id="9">Microsoft</company>
    <company id="10">IBM</company>
    <company id="11">Apple</company>
    <company id="12">  Oracle 
      <SubCompany>
         <company id="12.1">OracleSubCorporation</company>
      </SubCompany> 
    </company>
  </companies>
</root>

在这里,我想选择标签值,其值必须是&#34; Oracle&#34;。请注意,每个元素可能有&#34; n&#34;儿童元素的水平。

所以我的XPATH查询是:

/root/companies/company/[normalize-space(text())='Oracle']

但我有错误&#34;无法评估查询&#34;,同时这样做。

我可以知道,如何实现当前的查询。

提前致谢。

2 个答案:

答案 0 :(得分:0)

由于额外斜杠,您的表达式无效:

/root/companies/company/[normalize-space(text())='Oracle']
                   HERE^

演示(使用xmllint):

$ xmllint test.xml --xpath "/root/companies/company/[normalize-space(text())='Oracle']"
XPath error : Invalid expression
/root/companies/company/[normalize-space(text())='Oracle']
                        ^
xmlXPathEval: evaluation failed
XPath evaluation failure

$ xmllint test.xml --xpath "/root/companies/company[normalize-space(text())='Oracle']"
<company id="12">  Oracle 
  <SubCompany>
     <company id="12.1">OracleSubCorporation</company>
  </SubCompany> 
</company>

答案 1 :(得分:0)

在公司之后,您的XPath查询中有一个额外的/。谓词([]中的部分)应该是公司元素本身,您正在寻找文本内容为&#39; Oracle&#39;对吗?所以谓词应该在公司元素上:

/root/companies/company[normalize-space(text())='Oracle']

您可以访问所有公司,也可以返回名为“Oracle&#39; Oracle”的子公司。使用:

//companies//company[normalize-space(text())='Oracle']