2016-10-23 14 views
3

私はHTMLファイルには、以下のように見えるがあります。特定の兄弟の前のすべての子要素のXPath?

<r> 
    <ab id = "1"> 
    <event/> 
    <li>a</li> 
    <li>b</li> 
    <action/> 
    <li>a2</li> 
    <li>b2</li> 
    <action/> 
    </ab> 
    <ab id = "2"> 
    <event/> 
    <li>a3</li> 
    <li>b3</li> 
    <action/> 
    </ab> 
</r> 

私は何をしたいのは、それがアクションノードを満たすまで、すべてのイベントのノードに対して以下のすべての兄弟ノードを見つけ、htmlファイル内のすべてのイベントノードを最初に発見されました。だから、最初のイベントのノードのために、結果は

<li>a</li> 
<li>b</li> 

そして、第2のイベントノードに対して、結果は最初の工程のために

<li>a3</li> 
<li>b3</li> 

であるべきであるべきで、Iは

/r/ab/event 
を使用しました

と希望の結果が得られますが、私は2番目のステップで固執して混乱します。私は使用しようとしました

following-sibling::*[following-sibling::action[1]] 

それは私の最初のイベントノードの

<li>a</li> 
<li>b</li> 
<action/> 
<li>a2</li> 
<li>b2</li> 

の結果を与え、その結果第2のイベントノードの

<li>a3</li> 
<li>b3</li> 

この問題を解決する方法はありますか? また、私は述語の中で兄弟姉妹を誤用するかもしれないと思いますが、文書番号https://www.w3.org/TR/xpathを見ましたが、それを使用する方法が分かりませんでした。

答えて

0

このXPathの

/r/ab/event/following-sibling::li[not(preceding-sibling::action)] 

event要素を追跡し、要求に応じて、先行するaction要素の兄弟、

<li>a</li> 
<li>b</li> 
<li>a3</li> 
<li>b3</li> 

を持たないすべてのliの要素を選択します。

+0

それは私の作品です。どうもありがとうございました! – Cirrus

+0

あなたはこの理由を知っていますか? – Cirrus

+0

コメントを削除する方法を学習しています。「あなたはこの理由を知っていますか?」というコメントを無視してください。 – Cirrus

関連する問題