【问题标题】:How to select elements containing special characters in XPath?如何在 XPath 中选择包含特殊字符的元素?
【发布时间】:2021-10-10 10:34:04
【问题描述】:

我正在尝试从结果集中排除三个 <td> 元素:

<td>
    &#x1F947;
</td>
<td>
    &#x1F948;
</td>
<td>
    &#x1F949;
</td>

我尝试过使用:

td[not(contains(., '&#x1F948;'))]

例如,但我不想要的元素仍然回来......

【问题讨论】:

    标签: html xml xpath special-characters


    【解决方案1】:

    在 xpath 表达式中,您需要使用宿主语言的转义约定。如果宿主是 XSLT,则使用 &-escaping 很好,但如果是 JavaScript,例如,您将需要使用反斜杠转义。

    【讨论】:

    【解决方案2】:

    为避免转义约定的迷宫,只需使用文字 Unicode 字符本身,即可从 Compart 等网站搜索然后复制粘贴:

    Char Entity Ref Literal Unicode XPath
    &amp;#x1F947; ? //td[not(contains(.,'?'))]
    &amp;#x1F948; ? //td[not(contains(.,'?'))]
    &amp;#x1F949; ? //td[not(contains(.,'?'))]

    这是一个 XPath 2.0+ 表达式,它将选择文档中的所有 td 元素除了那些由目标特殊字符组成的元素:

    //td[not(normalize-space() = ('?', '?','?'))]
    

    在 XPath 1.0 中,您必须分别写出子句:

    //td[not(normalize-space() = '?') and 
         not(normalize-space() = '?') and 
         not(normalize-space() = '?')]
    

    根据 DeMorgan 的口味重新排列。如果您真的想通过子字符串包含而不是字符串值相等进行测试,请返回 contains()

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 2018-06-21
      • 2022-05-25
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多