2010-12-14 23 views
75

私の目標は、XPathを使用して複数の名前空間を持つ複数のXMLファイルから特定のノードを抽出することです。私は名前空間URIを知っている限り、すべてうまく動作します。名前空間の名前自体は変わりませんが、スキーマ(XSD)はクライアントによって生成されることがあります。そして、私は基本的に3つの選択肢が残されています:名前空間の
XPathで名前空間を無視する方法

  1. 使用ひとつのスキーマ、何も望んでいないことがうまくいかない(私は確認することができますか?)

  2. ドキュメントの子ノードを取得し、名前空間URIを持つ最初のノードを探し、URIを使用して正しいURIを期待してURIを使用します。複数の理由で間違っている可能性があります

  3. 何とかxpath: "見て、私は名前空間について気にしません、この名前のすべてのノードを見つけるだけで、私はあなたに名前空間を教えても、 。見つかったhereまたはhereような質問「私は名前空間の意識を認識していないですので、作業doesntの私のXPath式」そして、これは、ここで質問です...

これは、多数の繰り返しではありません。私は名前空間認識を使用する方法を知っています。ちょうどそれを取り除く方法ではありません。

+2

スキーマがわからない場合は、どのような要素が必要かをどのように知っていますか? –

+3

[XPathでXML文書を解析する際に名前空間を無視する方法]の正確な複製(http://stackoverflow.com/questions/4402310/how-to-ignore-namespace-when-parsing-xml-document-with-xpath) –

+0

指摘してくれてありがとう、アレハンドロ。 "ignore namespace xpath"の検索はこれを明らかにしているはずですが、 – kostja

答えて

113

local-name() XPath関数を使用できます。あなたが以内にXPath2.0で同じことを行うことができます

/path/to/*[local-name() = 'somenode'] 
+6

また、名前空間を意識しないで属性を参照するために 'local-name()'を使用することもできます:http://stackoverflow.com/q/21239181/274677 –

+0

このチュートリアル:http://www.codesimplify.com/java/java-xpath-ignore-namespace-example/ – hipokito

9

:代わりにあなたが正しいローカル名を持つ1のためのすべてのノードとフィルタを選択することができます

/path/to/x:somenode 

のようなノードを選択します冗長な構文:

/path/to/*:somenode 
関連する問題