2016-05-24 8 views
0
<document> 
    <para> 
    <heading id="1" type="new" level="1" /> 
    <span /> 
    <heading id="2" type="new" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <heading id="3" type="new" level="1" /> 
    <span /> 
    <heading id="4" type="new" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <heading id="5" type="old" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <heading id="6" type="old" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <heading id="7" type="old" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <heading id="8" type="old" level="2" /> 
    <span /> 
    </para> 
    <para> 
    <span /> 
    </para> 
</document> 

こんにちはとの最初のノード、特定の属性値

私はJavaScriptで上記XMLノードごとのノードを解析していますを検索します。私が現在 "heading id = '8' 'ノードにいると仮定すると、どのようにして後方に向かって見て、レベルが" 2 "に設定されている最初のノードを見つけるでしょうか(私が現在解析しているノードのレベルXPath式を使用して "new"に設定しますか?

したがって、上記の例では、id = "4"の要素を選択する必要があります。

ありがとうございます!

+0

は言及を忘れまあ、私は、XPath 1.0に – Josh

答えて

0

あなたはpreceding軸を使用し、唯一の最寄りの前にある要素を返すためにインデックスを使用することができます。

preceding::*[@level='2' and @type='new'][1] 

xpathtester demo

出力:

<heading id="4" level="2" type="new"/> 

Inをデモでは、最初にid=8の要素を選択するために//*[@id='8']を使用して、コンテキスト要素をシミュレートし、上記のXPathを使用してターゲット要素を選択し続けます。

+0

おっとを使用していますが - 私の質問を修正しました。それはレベルでなければなりません。 – Josh

+0

@Joshどちらを選択するか、id = 2またはid = 4の要素ですか? – har07

+0

基本的には、後方を見るときに現在のノードから最も近いものを選択したいと思います。したがって、この場合、id = 4の要素になります。 – Josh

0

実際、私はあなたがこれを望んでいると思っていました。

はどのようにして後方を見て、それは私が現在、XPath式を使用してnewにとタイプセットを解析していノード上のレベルと同じに設定されたレベルのしている最初のノードを見つけるだろうか?

今後の参考のためにここにこれを残して...

[@type='new' and @level=current()/@level] 
+0

うん、私もうまくいくだろう。ありがとう! – Josh

関連する問題