4

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 は正しいノードを返します。これら 2 つの条件 (両方とも問題のノードに当てはまる) がand. 私は決して XPath の専門家ではないので、このスニペット内で標準外のことを行っているのか、それとも Edge プレビューの XPath 実装に問題があるように見えるのか、誰か教えてもらえますか?

4

2 に答える 2

4

更新: この問題は、Windows/Edge の 2015 年 11 月の更新で解決されました。

これは、Microsoft Edge の現在の実装のバグのようです。ただし、条件を逆にすると、適切な要素が取得されることに気付きました。

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

当分の間、これが受け入れられる代替手段であることを願っています。私たちのチームが私たちの側で確認できるように、バグを公開しています。Microsoft Edge の改善にご協力いただきありがとうございます :)

于 2015-06-11T18:40:47.920 に答える
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"]')
于 2015-10-16T14:50:46.823 に答える