Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与其他浏览器相比,Edge中Xpath函数名()的大小写敏感度不一致_Xpath_Microsoft Edge - Fatal编程技术网

与其他浏览器相比,Edge中Xpath函数名()的大小写敏感度不一致

与其他浏览器相比,Edge中Xpath函数名()的大小写敏感度不一致,xpath,microsoft-edge,Xpath,Microsoft Edge,问题: 在Edge中使用[name()=“SomeValue”]时,如果要匹配的“SomeValue”包含大写字母,则不会返回节点。即使这些大写字母与节点名称完全匹配 示例: 我创建了JSFiddle,它显示了问题。它使用两个XML字符串,都是MSDN上books.XML示例的子集,其中第一个使用大写的节点名称,第二个使用小写的节点名称 当前结果: 在Edge中运行fiddle,您将看到在搜索[name()=“catalog”]时,如果“catalog”的大小写混合,则XPath将仅在搜索词完全

问题:
在Edge中使用
[name()=“SomeValue”]
时,如果要匹配的
“SomeValue”
包含大写字母,则不会返回节点。即使这些大写字母与节点名称完全匹配

示例:
我创建了JSFiddle,它显示了问题。它使用两个XML字符串,都是MSDN上books.XML示例的子集,其中第一个使用大写的节点名称,第二个使用小写的节点名称

当前结果:
在Edge中运行fiddle,您将看到在搜索
[name()=“catalog”]
时,如果
“catalog”
的大小写混合,则XPath将仅在搜索词完全小写时匹配节点。请注意,匹配节点的大小写并不重要,如果节点名称为驼峰大小写、大写或全小写,则术语
“catalog”
将匹配节点

边缘将匹配以下三个节点:

当在另一个浏览器(我已经测试过Firefox、Chrome和Opera)中运行相同的程序时,搜索词必须与节点名称大小写完全匹配,这也是我期望XPath的操作方式。当使用
[name()=“Catalog”]

预期结果:
我希望Edge的行为与其他浏览器相同,因为像
text()
这样的其他函数在Edge中不以这种方式运行,这使得它更加不一致。JSFIDLE中也显示了这一点

我期望出现相同行为的另一个原因是,所有经过测试的浏览器都只支持XPath 1.0,因此应该没有区别

总而言之:
这是边缘缺陷吗?/这是标准允许的吗?如果这是不允许的,我可以写一个错误报告给微软。如果标准允许,我是否只需要考虑浏览器差异

其他信息

使用jQuery支持现有软件,并寻找不需要额外第三方软件的解决方案

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

这里潜在的问题是,您正在使用HTML5DOM来保存非HTML的内容。这是一个坏主意,因为HTML5试图将您的内容弯曲到HTML5模型,这可能会以令人惊讶的方式损坏您的数据。最好为这些数据创建一个XMLDOM

另外,使用谓词
[name()='SomeValue']
无论如何都是不好的做法,因为XPath 1.0不保证
name()
函数结果中的命名空间前缀。如果数据位于命名空间中,则最好使用
self::SomeValue
self::hh:SomeValue
(尽管HTML5到XPath数据模型的命名空间实例的映射会引发另一组潜在问题)


建议:使用Saxon JS作为XPath引擎。这样一来,(a)您可以获得对XPath 3.0而不是1.0的支持,(b)您在每个浏览器上使用相同的XPath引擎,因此它可以提供跨浏览器的兼容行为。

接下来的问题是:当您说“XML DOM”与HTML5 DOM时,是否有您知道的Edge或jQuery本机容器?或者Edge使用的所有文档(甚至是jQuery创建的文档,因为它使用本机解析引擎)都将基于HTML5吗?不幸的是,我无法添加任何我们尚未使用的第三方软件。谢谢你的详尽回答!据我所知,您已经完全重写了示例代码,而JSFIDLE(据我所知)中没有关于前面代码的记录。这意味着我的答案是基于一个完全不同的问题,而这个问题已经不可理解了。这就是为什么StackOverflow强烈反对依赖外部站点链接的问题。我很想继续调查,但如果没有准确的对话历史记录,我就不能这样做。我已还原了原始链接,如果您仍想继续,我已将更新的链接移到段落末尾。很抱歉给您带来不便。