XPath:在某个标记之后和相同的下一个标记之前选择文本

时间:2011-06-21 09:16:19

标签: xpath

我有这样的HTML代码:

<strong>Term:</strong>
Some text<br />
More text<br />
Some more lines of text
<strong>Term:</strong>
Some text<br />
More text<br />
Some more lines of text
<strong>Second term:</strong>
Some text<br />
More text<br />
Some more lines of text
<strong>Term:</strong>
Some text<br />
More text<br />
Some more lines of text

我需要在带有文本“Term”的标记之间和下一个标记之前获取文本节点:

Some text
More text
Some more lines of text
Some text
More text
Some more lines of text
Some text
More text
Some more lines of text

这里可以使用条件:上一个标签必须包含文本“Term”,但我不知道如何创建这样的xpath选择器。

2 个答案:

答案 0 :(得分:5)

//text()[preceding::*[contains(text(),'Term:')] and following::*[contains(text(),'Term:')]]

这与empo建议的相同。但是,我正在寻找一个包含Term的节点,并返回它们之间存在的所有文本节点。

但是,只有当您没有任何其他“术语”时,这才能正常工作。 如果是这种情况,请告诉我,因为这个Xpath也将返回一些不需要的值。

此后您已更新输入。 我只是在上一个Xpath中添加了一个条件。

//text()[preceding::*[contains(text(),'Term:')] and following::*[contains(text(),'Term:')] and not(contains(., 'Term:'))]

@empo解决方案也有效。但我们正在考虑<strong>。我编写的xpath只检查单词'Term:',并给出它们之间的所有textNodes。

请告诉我这是否适合您。

问候。

答案 1 :(得分:2)

您的问题仍然含糊不清,输入文档格式不正确。检查一下:

root/text()[preceding::strong[1][contains(text(),'Term')]]

申请:

<root>
<strong>Term:</strong>
Some text<br />
More text<br />
Some more lines of text
<strong>Term:</strong>
Some text2<br />
More text2<br />
Some more lines of text2
<strong>Second term:</strong>
Some text3<br />
More text3<br />
Some more lines of text3
<strong>Term:</strong>
Some text4<br />
More text4<br />
Some more lines of text4
</root>

产生

Some text
More text
Some more lines of text

Some text2
More text2
Some more lines of text2

Some text4
More text4
Some more lines of text4

此XPath选择包含字符串Term:的元素与包含任何字符串的元素之间的所有文本节点:

//text()[preceding::*[contains(text(),'Term:')] and following::*[text()]]

申请:

<root>
<strong>Term:</strong>
Some text<br />
More text<br />
Some more lines of text
<strong>Second term:</strong>
Some text2<br />
More text2<br />
Some more lines of text2
</root>

返回:

Some text
More text
Some more lines of text