鉴于以下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()
产生一个空字符串
答案 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>