2

ここに素敵なパズルがあります。次のコードがあるとします。

<page n="1">
 <line n="3">...</line>
</page>

単純な xpath 式を使用して、ページ要素 "n=1"内の要素 "n=3"を見つけるのは非常に簡単です: xpath(//page[@n='1')/line[@n='3 ']))。素晴らしい、美しい、エレガント。ここで、このエンコーディングがあるとします (TEI に詳しい人は、これがどこから来ているかを知っているでしょう)。

<pb n="1"/>
(arbitrary amounts of stuff)
<lb n="3"/>

n="1" のpb要素に続く、n="3"のlb要素を探します。ただし、注意してください - このlb要素は、 pbに続くほぼどこにでもある可能性があります: 兄弟ではない可能性があります (おそらく兄弟ではない可能性があります) が、 pbの兄弟またはpbの親などの子である可能性があります。などなど

私の質問: n="1" のpb要素に続く n="3"のこのlb要素を、XPath を使用してどのように検索しますか?

前もって感謝します

ピーター

4

2 に答える 2

2

使用:

  //pb[@n='1']/following::lb[@n='2']
|
  //pb[@n='1']/descendant::lb[@n='2']

これにより、指定されたドキュメント順序lbに従う任意の要素が選択されます。必要な要素がその要素の子孫であってもです。pblbpb

次の式は、通常、必要なすべての要素を選択するわけではないlbことに注意してください(要素の子孫であるこれらのいずれかを選択することはできませんpb)。

  //pb[@n='1']/following::lb[@n='2']

説明:

W3C XPath 仕様で定義されているように、軸following::descendant::軸は重なっていません。

"次の軸には、ドキュメントの順序でコンテキスト ノードの後に​​ある、コンテキスト ノードと同じドキュメント内のすべてのノードが含まれます。 子孫は除外され、属性ノードと名前空間ノードは除外されます"

于 2012-07-07T00:23:03.843 に答える
1

それは

//pb[@n=1]/following::lb[@n=3]
于 2012-07-06T23:25:11.427 に答える