使用“和”的XPath表达式在Microsoft Edge中不起作用?

时间:2015-06-11 17:31:06

标签: xml xpath microsoft-edge

我正在开发一个使用XPath表达式从XML中选择节点的应用程序。我们已经注意到,在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中,这将注销1nodes.snapshotItem将包含正确的节点,但在Edge中,它会注销0并且不返回任何节点。

如果我分别运行此条件的一半,"//f[@id='some_id']""//f[f]",它会在浏览器中一致地运行,而Edge会返回正确的节点。只有当这两个条件(对于所讨论的节点都是真的)与and组合时,它才会失败。我不是任何一个XPath专家,所以任何人都可以告诉我,如果我在这个片段中做任何非标准的事情,或者这看起来像是Edge预览的XPath实现的问题吗?

2 个答案:

答案 0 :(得分:3)

更新:此问题已在2015年11月更新到Windows / Edge

中得到解决

这似乎是Microsoft Edge中当前实现的错误。然而,我确实注意到,如果你翻转条件,就会检索到正确的元素:

//f[f and @id='some_id']

目前,我希望这是一个可以接受的选择。我正在为我们的团队开辟一个错误,让我们在最后审核。比你帮助我们改进Microsoft Edge:)

答案 1 :(得分:3)

在Edge中失败的XPath后跟类似的替代方法:

故障

'/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"]')