2016-03-20 21 views
1

次のxpathクエリがあります。その属性を持つアイテムではなく、pi-repeatのアイテムしか見つからないようにする方法はわかりません。属性Xを持つノード内にないhtmlノードを取得

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//*[@pi-repeat]') as $node) { 
    // Do stuff 
} 

HTMLの例:

<body> 
    <div pi-repeat="thing1"> 
     <div pi-repeat="sub-item"></div> 
    </div> 
    <div class="a-class"> 
     <div pi-repeat="thing2"> 
      <div pi-repeat="sub-item"></div> 
     </div> 
    </div> 
</body> 

次の4つのpi-repeat属性が存在し、ここで見ることができるように、私は唯一の要素pi-repeat属性内にないものを選択するために、私のクエリをしたいと思います。この場合

、唯一thing1thing2は、選択になるだろう。

答えて

3

のXPathで2番目の述語は、以下の作業を行います。あなたは「と...祖先を持つ」の意味としての要件に「内」を読んだ

//*[@pi-repeat][not(ancestor::*[@pi-repeat])] 
+1

:それは祖先要素がpi-repeat属性を持つ要素をフィルタリングします。また、「親を持つ」と読むこともできます。その場合、答えは「// * [pi-repeat] [not(.. [pi-repeat])]」となります。 –

関連する問題