具有多个兄弟属性的XML XPATH Query兄弟值

时间:2012-06-05 16:04:15

标签: xml xpath

鉴于以下XML,我想构建一个XPath查询,以获取包含HTML的Body节点的文本

<documents>
 <document>
  <items>
   <item name='Form'>
    Procedure
   </item>
   <item name='Body'>
    <![CDATA[<p>arbitrary html</p>]]>
   </item>
  </items>
 </document>
 <document>
  <items>
   <item name='Form'>
    Process
   </item>
   <item name='Body'>
    Some arbitrary value
   </item>
  </items>
 </document>
</documents>

我能够接近,我只是遗漏了一些东西。 (这可能不是到达那里的最佳方式,但这是我能够接近的唯一方式)

//document/items/item[@name='Form'][text()='Procedure']/../item[@name='Body']

结果在CDATA包装的内容中,我迷失了如何选择内部文本。

//document/items/item[@name='Form'][text()='Procedure']/../item[@name='Body']/text()

产生一个空字符串

1 个答案:

答案 0 :(得分:1)

使用此XPATH获得预期结果: -

//document[items/item[@name='Form']/text()='Procedure']/items/item[@name='Body']/text()

结果:

<p>arbitrary html</p>

更新:

我在您的XML上遇到了实际问题。

表单节点的值包含空格,这会导致问题。

要解决此问题,请将此新XPATH与normalize-space()

一起使用
//document[normalize-space(items/item[@name='Form']/text())='Procedure']/items/item[@name='Body']/text()

结果:

<p>arbitrary html</p>