3

単純なxmlノードと同様に単純なxpathクエリ式がありますが、正しく機能していません。さまざまなバリエーション(// node-name、* [name()='node-name']、current-node-name / node-name)を試しましたが、それでも正しいノードが見つかりません!

これが私のxmlです:

<page-reference xmlns="http://something.com">
  <relative-path>something/something</relative-path>
  <base-path>somePath</base-path>
</page-reference>

xパスのいくつかの異なるバリエーションを試しました。それらのほとんどは、page-referenceタグのxmlns属性を取得すると機能します。例://relative-path, /page-reference/relative-path, relative-path, page-reference/relative-path。ただし、xmlns属性では機能しません。

これを引き起こしている可能性のあるアイデアはありますか?値のhttpの後の二重スラッシュだと思いましたが、なぜそれが問題になるのかわかりませんし、そうではないようです。

4

3 に答える 3

2

このxmlns属性は、要素の名前空間を提供します。つまり、通常の「ページ参照」または「相対パス」要素ではないため、そのようにアクセスすることはできません。言語が異なれば、XPathクエリのデフォルトを示す方法からプレフィックスを使用する方法まで、名前空間を示す方法が異なります。

JavaScriptの場合、名前空間リゾルバーを使用できます:https ://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver (プレフィックスを指定する場合-ドキュメント内で異なる名前空間が使用されている場合に便利です) /またはXPath式内のデフォルトの名前空間に依存する(ただし、いくつかの--ANY--プレフィックスを使用する必要があります):https ://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_default_namespace_for_XML_documents

var xml = new DOMParser().parseFromString('<page-reference xmlns="http://something.com">'+
  '<relative-path>something/something</relative-path>'+
  '<base-path>somePath</base-path>'+
'</page-reference>', 'text/xml');

function resolver() {
    return 'http://something.com';
}
var refs = xml.evaluate('//x:page-reference', xml, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
alert(refs.snapshotItem(0).nodeName) // 'page-reference'

IEをサポートするにはシムが必要です。(クイック検索でhttp://sourceforge.net/projects/js-xpath/files/js-xpath/が見つかりました)

于 2012-12-03T15:23:59.227 に答える
2

または、代わりに、次を使用することもできます

//*[name()='relative-path']
于 2012-12-03T15:28:55.633 に答える
1

XPathは、「デフォルト」のXML名前空間(xmlns)を認識しません。そのため、XPath式のすべてのノードにページ参照タグの名前空間をプレフィックスとして付ける必要があります。

XML:

<page-reference xmlns:s="http://something.com">
  <relative-path>something/something</relative-path>
  <base-path>somePath</base-path>
</page-reference>

XPath:

//s:relative-path
于 2012-12-03T15:24:32.520 に答える