2

私は XPATH を初めて使用するので、XPATH クエリを使用してこれを行う良い方法があるかどうか知りたいです。

XML ツリー内の連続する兄弟ノードを特定の事前定義されたルールに一致させたいと考えています。 "、XPATH クエリがそのようなシーケンスの最初のノード/最後のノードに一致するようにしたいし、後でそれらを処理できるように、XML ツリーからそのような連続したノードのシーケンスをすべて抽出したいと考えています。

ありがとう!

4

2 に答える 2

3

考えられる解決策の 1 つを次に示します

初め:

XML ツリー内の連続する兄弟ノードを特定の事前定義されたルールに一致させたいと考えています。 "、

//*[@value='A' 
  and 
   following-sibling::*[1]/@value='B' 
  and 
   following-sibling::*[2]/@value='C']

それで:

このような連続するノードのシーケンスをすべて XML ツリーから抽出したいのですが ...

    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']
   |
    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']

      /following-sibling::*[position() = 1 or position()=2]

真の XPathVisualizer での選択は次のようになります (_http://www.topxml.com/xpathvisualizer/ -- このリンクにはトロイの木馬が含まれています -- マルウェアから十分に保護されている場合にのみクリックしてください。アプリについては私に連絡してください。 ):

代替テキスト

ついに:

XPATH クエリをこのようなシーケンスの最初のノード/最後のノードに一致させたい

    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']
   |
    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']

      /following-sibling::*[position()=2]
于 2010-04-22T16:37:08.460 に答える
1

注:これは質問への回答ではありません。これを書いているとき、私はそれを誤解しました。

それらをクエリするにはposition()=1 or position()=last()、ノードを選択するために使用する他の述語と一緒に述語として使用します。

XpathVisualizerでは次のようになります。

代替テキスト

「それらを抽出する」ことはxpathの問題ではありません。そのためには、選択した要素を列挙してから、好きなことをすることができます。それはあなた次第です。

于 2010-04-22T15:22:00.567 に答える