我有这样的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选择器。
答案 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