0

给定以下 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()

正在产生一个空字符串

4

1 回答 1

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>
于 2012-06-05T16:42:56.390 回答