XPathクエリ結果の親ノードを取得するより良い方法はありますか? 質問する

XPathクエリ結果の親ノードを取得するより良い方法はありますか? 質問する

次のようなマークアップがあります:

<div class="foo">
   <div><span class="a1"></span><a href="...">...</a></div>
   <div><span class="a2"></span><a href="...">...</a></div>
   <div><span class="a1"></span>some text</div>
   <div><span class="a3"></span>some text</div>
</div>

私はすべてを手に入れることに興味があり<a>some text のみspan隣接がクラス の場合a1。したがって、コード全体の最後では、結果は<a>1 番目divと3 番目からになるはずです。と が内部にあるか、属性があるsome text場合は簡単ですが、運が悪かったです。<a>some textspandivclass

span私が今やっていることは、クラスで検索することですa1:

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]

次に、その親を取得し、query()その親をコンテキスト ノードとして別の操作を実行します。これは、効率的とは程遠いように見えるため、私の目標を達成するためのより良い方法はあるかどうかが明らかに疑問です。


回答補足

@MarcBによると受け入れられた回答使用する適切なクエリは次のとおりです。

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/..

ただし、<a>次の方法を使用する方が良いかもしれません。

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/../a

<a>コンテナの代わりにを取得します。

ベストアンサー1

xpathクエリの優れた点は、基本的にファイルシステムのパスのように扱うことができることです。

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/..
                                                              ^^

.foo ノードの下にあるすべての .a1 ノードを検索し、1 レベル上の a1 ノードの親に移動します。

おすすめ記事