9

のこぎりを使用しています。

深くネストされたパスがあるとします。

//h1/h2/h3/h4/h5

次のパスを使用できると思います。

//h1/*/*/*/h5

複数のアスタリスクを使用しないようにする方法はありますか? みたいな//h1/.../h5

入れ子のレベルを数え続けたくありません。

4

3 に答える 3

12

h1 使用から派生するすべての h5 要素に対して:

//h1//h5

または、よりシンプルな css スタイルが好きかもしれません:

h1 h5
于 2012-11-01T03:45:04.467 に答える
6

を使用するだけです: //、つまり: //h5。この XPath はすべてのh5要素を選択します。仕様を参照してください: http://www.w3.org/TR/xpath/#path-abbrev

于 2012-11-01T03:41:28.473 に答える
4

h5h1 祖先のちょうど 4 レベル下にあるすべてを選択する場合は、次を使用します。

//h5[ancestor::*[4][self::h1]]

XSLT ベースの検証:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="//h5[ancestor::*[4][self::h1]]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が次の XML ドキュメントに適用される場合:

<t>
 <head/>
 <body>
  <h1>First Main title
    <a>
     <b>
       <c>
         <h5 id="id1"/>
         <d>
           <h5 id="id2"/>
         </d>
       </c>
     </b>
    </a>
  </h1>
 </body>
</t>

XPath 式が評価され、評価の結果 (選択されたh1要素 (この場合は 1 つだけ)) が出力にコピーされます

<h5 id="id1"/>

中間レベルの数を数えたくないが、特定の数 (たとえば 7) を超えていないことが確実な場合は、次のように記述できます

//h1[descendent::*[not(position() > 7)][self::h1]]

これにより、と子孫の間のレベルの「距離」が 7 を超えない、 anyh5の子孫が選択h1h1h5されます。

注意してください:

以下のような表現 - 他の回答で示唆されているように:

//h1//h5

上記のドキュメントに対して誤って選択します:

<h5 id="id1"/>
<h5 id="id2"/>

選択した 2 つの要素の 2 番目は、その先祖h5から必要な要素よりも離れていh1ます。

于 2012-11-01T04:18:33.280 に答える