XML XPath查找具有属性及其父级的所有节点

时间:2017-07-21 15:28:51

标签: xml xpath

我想编写将从此xml

返回的XPath查询
<?xml version="1.0" encoding="UTF-8"?>

<contents> 
  <content type="menu_0" nested="yes"> 
    <content type="name" lang="pol"><![CDATA[PIES]]></content>  
    <content type="menu_1" nested="yes"> 
      <content type="name" lang="pol"><![CDATA[Thing1]]></content>  
      <content type="name" lang="pol"><![CDATA[Thing2]]></content>  
      <content type="name" lang="pol"><![CDATA[Thing3]]></content> 
    </content> 
  </content> 
</contents>

类似这样的事情

PIES\Thing1
PIES\Thing2
PIES\Thing3

有人可以帮忙吗?:)

1 个答案:

答案 0 :(得分:1)

使用 XPath 1.0 ,无法获得所需的所有节点,PIES\连接到Thing*,您需要使用三个xpath表达式,如下所示:

concat( //content[@type='menu_0']/content[@type='name']/text(), '\',  //content[@type='menu_0']/content[@type='menu_1']/content[1]/text())

concat( //content[@type='menu_0']/content[@type='name']/text(), '\',  //content[@type='menu_0']/content[@type='menu_1']/content[2]/text())

concat( //content[@type='menu_0']/content[@type='name']/text(), '\',  //content[@type='menu_0']/content[@type='menu_1']/content[3]/text())

使用 XPath 2.0 ,您可以使用for循环在一个xpath表达式中返回列表,如下所示:

for $thing in //content[@type='menu_0']/content[@type='menu_1']/content/text()
   return concat( //content[@type='menu_0']/content[@type='name']/text(), '\',  $thing )