2017-08-14 26 views
0

特定の兄弟ノードまで、兄弟ノードの範囲を選択します。私は、各スーパーの後に来るすべての「レベル2」のSを取得しようとしてきたXPathは:私は<em>Lisの</em>次いる

<ul> 
    //1st subcategory with 4 sub categories   
    <li class="supercategory"></li> 
     <li class="subcategory"></li> 
     <li class="subcategory"></li> 
     <li class="subcategory"></li> 
     <li class="subcategory"></li> 

    //2nd subcategory with 3 sub categories 
    <li class="supercategory"></li> 
     <li class="subcategory"></li> 
     <li class="subcategory"></li> 
     <li class="subcategory"></li> 

    //3d subcategory with 1 sub category 
    <li class="supercategory"></li> 
     <li class="subcategory"></li> 
</ul> 

カテゴリー。したがって、第1のスーパーカテゴリの場合、xpathの一致は、兄弟の4つのサブカテゴリ、第2のスーパーカテゴリのxpathは3 lisなどとなります。

、私はいくつかのことを試してみましたが、単純なスタートのようになります。私は2回目、スーパーの後に3つのサブカテゴリLISを取得しようとしていますが、明らかに、これはすべてのLISとを返します

//li[@class="supercategory"][position()=2]/following-sibling::li[@class ="subcategory"] 

クラスサブカテゴリ。

したがって、この問題を解決するのに適した述語があるかどうかは疑問です。特にこのシナリオでは、サブカテゴリはそのスーパーカテゴリを持つ兄弟ノードである。便宜上

私はここでこれをテストされています:事前にhttps://www.freeformatter.com/xpath-tester.html

感謝を。

答えて

0

どのようにxpathを使用していますか?

スーパーカテゴリをループしてその位置を知り、xpathを動的に構築できるのであれば、先行するスーバーカロリー​​を数えることができます。

//li[@class="supercategory"][position()=2]/following-sibling::li[@class ="subcategory"][count(preceding-sibling::li[@class='supercategory']) = 2] 
+0

申し訳ありません。xpathルールが第2スーパーカテゴリのサブカテゴリを取得するためのものであることを指定するのを忘れていました。これは、他のサブカテゴリでも同様に機能するようです。 – Orochi1992

+0

2番目のスーパーカテゴリのサブカテゴリだけを取得したいのであれば、これはちょうどあなたが使うべきxpathです。 –

+0

若干の変更を加えれば、他のスーパーカテゴリにも適用できます。だから感謝しています。 – Orochi1992

関連する問題