2012-01-04 25 views
3

これは愚かな質問かもしれませんが、要素名を指定せずにXPathを使用してクエリを行うことは可能ですか? 通常、私は要素名を指定せずに複数の要素を照会する

//ElementName[@id = "some_id"] 

のようなものを書くだろうが、事は、私がid属性を持つ多く(約40)の異なる要素タイプを持っていると私はidが収まる場合は、それらのいずれかを返すことができるようにしたいです。しかし、私は個々のタイプごとにこの呼び出しを個別に行う必要はありません。名前にかかわらず、一度にすべてを検索することは可能ですか?

これはXQueryスクリプトでこれを使用しています。代わりに名前//*[@id = "some_id"]

+1

愚かな質問 –

答えて

5

使用*これは@id要素を直接見た方が効率的かもしれない - // *動作しますが、最初は文書内のすべてのノードを返し、その後、フィルタします!

これは、小さな文書では問題ではないかもしれません。しかし、別の方法があります:

//@id[.="some_id"]/.. 
+0

ありがとう! – pajevic

1

+0

実際には、多くの(100,000以上の)要素を持つデータベースから掘り下げているので、とても重要です。 – pajevic

+0

MarkLogicやeXistなどのXMLデータベースの場合、特定の属性(@ idなど)が索引付けされていることがあります。 –

+0

実際、私はeXistを使用しています。私はeXistメーリングリストで最も効率的だったものを尋ねました。 _eXistは// * [@ id = "some_id"]でワイルドカードのステップを最適化し、 は基本的に '//@id[.="some_id"と同じ働きをします(Wolfgang Meier(eXistの元の作成者)/.. '。 eXistはまず '@id =" some_id "を評価し、次に、@ idのどの親要素がワイルドカードと一致するかを計算します._ しかし、一般的なXPathクエリではあなたの提案は有効だと思います。 – pajevic

関連する問題