Xpath:如何检查标签是在文本之前还是在文本之后?
Xpath: How to check if a tag comes before text or after text?
假设我有以下两个 HTML 的示例片段:
<p>This is some text: <b>ABCD12345</b></p>
<p><b>Name:</b> John Doe</p>
我可以区分 <b>
和非 <b>
部分,但我(也)想知道如何确定 <b>
部分是否在开头或在文本的末尾(换句话说;它之前或之后是否有文本)。怎么做?
我正在使用 Python(使用 lxml)如果它很重要(我不认为它真的很重要)。
这个 XPath,
not(/p/b/following-sibling::text())
将 return 为真,前提是 p
中 b
之后没有文本节点,如您的第一种情况:
<p>This is some text: <b>ABCD12345</b></p>
这个 XPath,
not(/p/b/preceding-sibling::text())
将 return 为真,前提是 p
中 b
之前没有文本节点,如您的第二种情况:
<p><b>Name:</b> John Doe</p>
如果感兴趣的 b
元素不是缺少而是存在文本 before/after,您可以将这些 XPath 表达式中的 not()
更改为 boolean()
.
假设我有以下两个 HTML 的示例片段:
<p>This is some text: <b>ABCD12345</b></p>
<p><b>Name:</b> John Doe</p>
我可以区分 <b>
和非 <b>
部分,但我(也)想知道如何确定 <b>
部分是否在开头或在文本的末尾(换句话说;它之前或之后是否有文本)。怎么做?
我正在使用 Python(使用 lxml)如果它很重要(我不认为它真的很重要)。
这个 XPath,
not(/p/b/following-sibling::text())
将 return 为真,前提是 p
中 b
之后没有文本节点,如您的第一种情况:
<p>This is some text: <b>ABCD12345</b></p>
这个 XPath,
not(/p/b/preceding-sibling::text())
将 return 为真,前提是 p
中 b
之前没有文本节点,如您的第二种情况:
<p><b>Name:</b> John Doe</p>
如果感兴趣的 b
元素不是缺少而是存在文本 before/after,您可以将这些 XPath 表达式中的 not()
更改为 boolean()
.