我正在使用XPath表達式從XML中選擇節點的應用程序。我們已經注意到,在Microsoft Edge預覽中進行測試時,這似乎對我們來說很不利。我剪了我們的代碼,演示了這一問題的簡短摘要:使用「和」的XPath表達式在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
將包含正確的節點,但在邊緣,它的退出0
和返回沒有節點。
如果我分別運行這個條件的一半,"//f[@id='some_id']"
或"//f[f]"
,它可以在瀏覽器中一致地運行,並且Edge返回正確的節點。只有當這兩個條件都成立時,它纔會失敗,這兩個條件都與and
相結合。我不是任何一個XPath專家,所以任何人都可以告訴我,如果我在這段代碼中做了任何非標準的事情,或者這看起來像是Edge預覽的XPath實現的問題?
什麼的'和F'意思? – hek2mgl
它指定我們需要一個至少有一個'f'子節點的'f'元素。它可以在我們測試過的所有瀏覽器中正常運行,直到Edge。 –
您的XPath對我來說看起來很標準; MS邊緣預覽似乎是在這一個錯誤。你也可以嘗試''''''''''''''f [@ id ='some_id'] [f]'或'f [@ id ='some_id'和count(child :: f)> 0]'看看那些更好在邊緣預覽中。 – LarsH