【问题标题】:Xpath: How to check if a tag comes before text or after text?Xpath:如何检查标签是在文本之前还是在文本之后?
【发布时间】:2021-11-29 01:40:42
【问题描述】:

假设我有以下两个 HTML 示例:

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

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

我可以将<b> 和非<b> 部分分开,但我(也)想知道如何确定<b> 部分是在文本的开头还是结尾(换句话说;它之前或之后是否有文本)。该怎么做?

如果重要的话,我正在使用 Python(带有 lxml)(我认为它不是真的)。​​

【问题讨论】:

    标签: python html xml xpath lxml


    【解决方案1】:

    这个 XPath,

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

    如果在p 中没有跟随b 的文本节点,则返回true,如您的第一种情况:

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

    这个 XPath,

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

    如果b 之前在p 中没有文本节点,则返回true,如您的第二种情况:

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

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

    【讨论】:

    • 酷!这就像一个魅力。我不知道text() 也可以这样使用。今天学到了新东西。谢谢! :)
    猜你喜欢
    • 2023-03-22
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多