XPath表达式获取具有子节点特定值的节点...名称空间不可知

时间:2018-04-02 19:50:14

标签: xml xpath

我需要帮助获取包含具有特定值的子节点的节点,命名空间无关。

所以,如果这是我的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<FWWO xmlns="http://www.ibm.com/maximo" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <FWWOSet>
    <WORKORDER>
      <COORDINATES>
        <Point>
          <KEY>123456</KEY>
          <LAT>32.97740936279297</LAT>
          <LONG>-81.84439086914062</LONG>
        </Point>
        <Point>
          <KEY>654321</KEY>
          <LAT>22.932993384764625</LAT>
          <LONG>-66.08171081542969</LONG>
        </Point>
      </COORDINATES>
    </WORKORDER>
  </FWWOSet>
</FWWO>

目前,我可以使用此

//*[name()='Point']

并获得以下内容:

<Point xmlns="http://www.ibm.com/maximo">
    <KEY>123456</KEY>
    <LAT>32.97740936279297</LAT>
    <LONG>-81.84439086914062</LONG>
</Point>    
<Point xmlns="http://www.ibm.com/maximo">
     <KEY>654321</KEY>
     <LAT>22.932993384764625</LAT>
     <LONG>-66.08171081542969</LONG>
</Point>  

我现在如何才能获得具有值为654321的KEY节点的Point节点(和子节点)?

我想要的结果是:

<Point xmlns="http://www.ibm.com/maximo">
     <KEY>654321</KEY>
     <LAT>22.932993384764625</LAT>
     <LONG>-66.08171081542969</LONG>
</Point>      

1 个答案:

答案 0 :(得分:1)

尝试添加其他谓词...

//*[local-name()='Point'][*[local-name()='KEY']='654321']

如果&#34; 的节点值为654321 &#34;从字面上看,这是一个选择......

//*[local-name()='Point'][.//node()[contains(.,'654321')]]