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 为真,前提是 pb 之后没有文本节点,如您的第一种情况:

<p>This is some text: <b>ABCD12345</b></p>

这个 XPath,

not(/p/b/preceding-sibling::text())

将 return 为真,前提是 pb 之前没有文本节点,如您的第二种情况:

<p><b>Name:</b> John Doe</p>

如果感兴趣的 b 元素不是缺少而是存在文本 before/after,您可以将这些 XPath 表达式中的 not() 更改为 boolean() .