使用 "and" 的 XPath 表达式在 Microsoft Edge 中不起作用?
XPath expression using "and" doesn't work in Microsoft Edge?
我正在开发一个应用程序,该应用程序将 XPath 表达式用于 XML 中的 select 个节点。我们注意到,在 Microsoft Edge 预览版中进行测试时,这似乎对我们来说是失败的。我已将我们的代码缩减为一个演示问题的简短片段:
var xml = "<xml id='relationships'><Relationships><f id='some_id' ><f id='some_other_id' /></f></Relationships></xml>";
var doc = (new DOMParser).parseFromString(xml, "text/xml");
var nodes = doc.evaluate("//f[@id='some_id' and f]", doc, doc.createNSResolver(doc.documentElement), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
console.log(nodes.snapshotLength);
在 Chrome 中,这将注销 1
并且 nodes.snapshotItem
将包含正确的节点,但在 Edge 中,它会注销 0
并且不返回任何节点.
如果我 运行 分别满足此条件的任何一半,"//f[@id='some_id']"
或 "//f[f]"
,它会在浏览器和 Edge returns 正确的节点上始终如一地工作。只有当这两个条件都适用于所讨论的节点并与 and
组合时,它才会失败。我无论如何都不是 XPath 专家,所以谁能告诉我我是否在这段代码中做了任何非标准的事情,或者这看起来像是 Edge 预览版的 XPath 实现的问题?
更新:此问题已在 2015 年 11 月对 Windows/Edge
的更新中得到解决
这似乎是 Microsoft Edge 中当前 实现的错误。但是,我确实注意到,如果您翻转条件,则会检索到正确的元素:
//f[f and @id='some_id']
目前,我希望这是一个可以接受的替代方案。我正在为我们的团队打开一个错误以供我们审查。感谢您帮助我们改进 Microsoft Edge :)
在 Edge 中失败的 XPaths 后跟类似的替代方法:
失败
'/value[Name/text()="Checked"]/Value[text()="true"]'
备选
'/value[Name ="Checked" and Value = "true"]/Value'
失败
'/value[text()="match1"]'
备选
'/value[.="match1"]'
失败
'/value[Name[text()="match1"]]'
备选
'/value[Name="match1"]'
失败
'/value[Name/text()= "match1"]'
备选
'/value[Name= "match1"]'
失败
'/value[Name[text() = 'match1']]')
备选
'/value[Name = "match1"]')
我正在开发一个应用程序,该应用程序将 XPath 表达式用于 XML 中的 select 个节点。我们注意到,在 Microsoft Edge 预览版中进行测试时,这似乎对我们来说是失败的。我已将我们的代码缩减为一个演示问题的简短片段:
var xml = "<xml id='relationships'><Relationships><f id='some_id' ><f id='some_other_id' /></f></Relationships></xml>";
var doc = (new DOMParser).parseFromString(xml, "text/xml");
var nodes = doc.evaluate("//f[@id='some_id' and f]", doc, doc.createNSResolver(doc.documentElement), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
console.log(nodes.snapshotLength);
在 Chrome 中,这将注销 1
并且 nodes.snapshotItem
将包含正确的节点,但在 Edge 中,它会注销 0
并且不返回任何节点.
如果我 运行 分别满足此条件的任何一半,"//f[@id='some_id']"
或 "//f[f]"
,它会在浏览器和 Edge returns 正确的节点上始终如一地工作。只有当这两个条件都适用于所讨论的节点并与 and
组合时,它才会失败。我无论如何都不是 XPath 专家,所以谁能告诉我我是否在这段代码中做了任何非标准的事情,或者这看起来像是 Edge 预览版的 XPath 实现的问题?
更新:此问题已在 2015 年 11 月对 Windows/Edge
的更新中得到解决这似乎是 Microsoft Edge 中当前 实现的错误。但是,我确实注意到,如果您翻转条件,则会检索到正确的元素:
//f[f and @id='some_id']
目前,我希望这是一个可以接受的替代方案。我正在为我们的团队打开一个错误以供我们审查。感谢您帮助我们改进 Microsoft Edge :)
在 Edge 中失败的 XPaths 后跟类似的替代方法:
失败
'/value[Name/text()="Checked"]/Value[text()="true"]'
备选
'/value[Name ="Checked" and Value = "true"]/Value'
失败
'/value[text()="match1"]'
备选
'/value[.="match1"]'
失败
'/value[Name[text()="match1"]]'
备选
'/value[Name="match1"]'
失败
'/value[Name/text()= "match1"]'
备选
'/value[Name= "match1"]'
失败
'/value[Name[text() = 'match1']]')
备选
'/value[Name = "match1"]')