与其他浏览器相比,Xpath函数名称()的区分大小写在Edge中不一致


v-star*위위
2025-03-18 05:43:43 (21天前)
  1. “]

预期成绩:
我期待

边缘
</跨度>
与其他浏览器的行为相同,因为text()之类的其他功能则不行

操作
</跨度>
这样

边缘
</跨度>
,这使它更加不一致。这显示在 问题中:
在[name()=“SomeValue”]中使用时

边缘
</跨度>
,如果要匹配的“SomeValue”包含大写字母,则不会返回节点。即使这些大写字母与节点名称完全匹配。

例:

2 条回复
  1. 0# 晴天?霹雳 | 2019-08-31 10-32



    XPath 1.0是在特定数据模型上定义的,与HTML DOM不完全相同。特别是HTML5 DOM是在XPath 1.0被冻结多年后定义的。这意味着任何在HTML5 DOM上实现XPath 1.0的人都必须决定如何将HTML5 DOM映射到XPath数据模型。如果不同的供应商以不同的方式进行这种映射,这是非常不幸的,但实际上并不违反任何标准。定义此映射的关键决策之一是如何处理HTML5不区分大小写而XPath 1.0区分大小写的事实。



    这里的根本问题是你使用HTML5 DOM来保存非HTML的东西。这是一个坏主意,因为HTML5会努力将您的内容弯曲到HTML5模型,这可能会以令人惊讶的方式破坏您的数据。为这些数据创建XML DOM会好得多。



    另外,使用谓词

    [name()=’SomeValue’]

    无论如何都是不好的做法,因为XPath 1.0不保证结果中的命名空间前缀

    name()

    功能。使用起来要好得多

    self::SomeValue

    , 要么

    self::hh:SomeValue

    如果数据在命名空间中(尽管HTML5到XPath数据模型的命名空间实例的映射会引发另一组潜在问题。)



    建议:使用Saxon-JS作为XPath引擎。这样(a)你得到XPath 3.0而不是1.0的支持,并且(b)你在每个浏览器上使用相同的XPath引擎,因此它将提供跨浏览器的兼容行为。


登录 后才能参与评论