2012-02-13 10 views
1

複数の名前空間を持つ文書でXPathクエリを使用しようとしており、NamespaceContextを定義する必要があります。考えられるすべての名前空間を取得する唯一の方法は、すべてのノードと属性に対して繰り返し、名前空間URIと接頭辞を明示的に収集することです。これは非常に非効率的なようで、私はそれがベストプラクティスであるか疑問を抱いています。XML文書内のすべての名前空間を特定する方法

どうすればよいですか?
ありがとうございます

+0

なぜすべての名前空間URIを取得する必要がありますか?クエリを構築するときは、あらかじめ名前空間を知っている方が良い(実際の接頭辞は無関係です)。それ以外の場合、クエリは何ですか? –

+0

@ 42この名前空間を透過的に扱うように見える内部のXPathAPIをエミュレートしたいと思っていました。だから私は名前空間データを渡す必要性を排除するためにUtilを構築しましたが、最良の方法についてはわかりません。 – kostja

+0

内部のXPathApiはどれですか? –

答えて

2

名前空間はXML文書のヘッダーと要素自体の両方で定義できるため、正しいです。あるドキュメントに使用されているすべての名前空間が必要な場合は、ドキュメント全体を処理する必要があります(100%完了したい場合はすべてのインポートを含む)。

人々がXPath-esqueクエリを使用してデータベースのようにドキュメントをクエリできるようにするには、おそらくすぐにクエリを実行できるメモリ内表現にドキュメントをロードしたいと思うでしょう。

とにかくすべてを処理しなければならないとすれば、それはすべての名前空間を解析する機会になります。

注:私はすべての名前空間が必要な理由を無視しています。私はあなたがそれらを必要とすると仮定します。この場合、ドキュメント全体を処理するという前提が正しいです。

+0

ありがとうございます。私はそれをどうやってやるのかと思っていました。しかし、私は名前空間認識なしで何が達成できるかを確認して見ていきます。結局、私がそれらを必要としないならば - 良いリダンダンス。 – kostja

関連する問題