【问题标题】:Selecting XML Element value using XPATH使用 XPATH 选择 XML 元素值
【发布时间】:2015-03-27 12:22:41
【问题描述】:

今天的问候。

当某些条件匹配时,我想选择特定的元素值。

这是我的代码:

<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>

在这里,我想选择标签值,其值必须是“Oracle”。请注意,每个元素可能有“n”级子元素。

所以我的 XPATH 查询是:

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

但我在这样做时遇到了“无法评估查询”的错误。

请问,如何实现当前的查询。

提前致谢。

【问题讨论】:

  • 不是专家,自从我使用 XPath 以来已经有一段时间了,但我认为您可以使用 //company? 访问所有公司节点?所以你可以得到所有名为 Oracle 的公司,例如 //company[normalize-space(text())='Oracle']。可能是错的

标签: xml xpath


【解决方案1】:

由于多余的斜线,您的表达式无效:

/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>

【讨论】:

    【解决方案2】:

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

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

    您可以访问所有公司,即也可以使用以下方法返回名为“Oracle”的子公司:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 2014-08-09
      • 2021-02-23
      相关资源
      最近更新 更多