2015-06-11 61 views
4

我正在使用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中,這將註銷1nodes.snapshotItem將包含正確的節點,但在邊緣,它的退出0和返回沒有節點。

如果我分別運行這個條件的一半,"//f[@id='some_id']""//f[f]",它可以在瀏覽器中一致地運行,並且Edge返回正確的節點。只有當這兩個條件都成立時,它纔會失敗,這兩個條件都與and相結合。我不是任何一個XPath專家,所以任何人都可以告訴我,如果我在這段代碼中做了任何非標準的事情,或者這看起來像是Edge預覽的XPath實現的問題?

+0

什麼的'和F'意思? – hek2mgl

+2

它指定我們需要一個至少有一個'f'子節點的'f'元素。它可以在我們測試過的所有瀏覽器中正常運行,直到Edge。 –

+1

您的XPath對我來說看起來很標準; MS邊緣預覽似乎是在這一個錯誤。你也可以嘗試''''''''''''''f [@ id ='some_id'] [f]'或'f [@ id ='some_id'和count(child :: f)> 0]'看看那些更好在邊緣預覽中。 – LarsH

回答

3

更新:這個問題是在2015年11月更新解決到Windows /邊緣

這似乎與微軟封邊當前實現中的錯誤。不過,我注意到,如果你翻轉周圍的條件,檢索正確的元素:

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

目前,我希望這是一個可以接受的選擇。我正在爲我們的團隊打開一個錯誤,在我們的結尾進行審查。比你幫助我們改善Microsoft邊緣:)

+0

任何包含「text()」的XPath在Microsoft Edge上也不起作用 –

+0

@AndrewMarais您能爲我整理一個最簡單的示例嗎?如果有問題,我會很樂意提交一個錯誤。 – Sampson

+0

當然 事件查看器從崩潰的邊緣剪切: **錯誤模塊路徑:C:\ Windows \ System32 \ twinapi.appcore。DLL ** URL (http://www.w3schools.com/xsl/tryit.asp?filename=try_xpath_select_pricenodes_text) 嘗試查看源代碼,或嘗試改變 '文本()=東西',並運行它 –

3

的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"]') 
相關問題