2

以下に示す多くの同様のドキュメントがあります。random0random1、およびタグの名前は、random2ドキュメントによって異なります。リストタグの数は固定されていません。xpathcontent タグから n 番目に近い子孫リスト タグを取得するにはどうすればn == 1よいですか1,2,3,10,11, 12n == 2戻る場合4,5,6。等々。注: 最も近い子孫リストのタグは、子、孫、またはそれ以上の可能性があります。

<?xml version="1.0" encoding="UTF-8"?>
<content>
     <random0>
        <list>1</list>
        <list>2</list>
        <list>3</list>
        <random1>
            <list>4</list>
            <list>5</list>
            <list>6</list>
            <random2>
                <list>7</list>
                <list>8</list>
                <list>9</list>
            </random2>
        </random1>
        <list>10</list>
        <list>11</list>
        <list>12</list>
    </random0>
</content>
4

1 に答える 1

3

これを分解すると、

  • list名前に関係なく、子を持つすべての子孫要素を検索します
  • それらのn番目のものを選ぶ
  • listすべての子を抽出する
descendant::*[list][$number]/list

またはおそらく

descendant-or-self::*[list][$number]/list

リストの最初のロットがコンテキスト ノード内に直接あることを許可する場合 (たとえば、random0ではなくから開始する場合content)。

XSLT の例

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

  <xsl:template match="/">
    <result>
      <xsl:copy-of select="descendant-or-self::*[list][2]/list" />
    </result>
  </xsl:template>

</xsl:stylesheet>

出力

<?xml version="1.0"?>
<result>
  <list>4</list>
  <list>5</list>
  <list>6</list>
</result>

注意。これは、 と の微妙な違いを明らかにする XPath のコーナー ケースの 1 つdescendant::です.//。の明らかな省略形はと同じで.//*[list][$num]/listなくdescendant::*[list][$num]/list、代わりに、それぞれの親内のn番目の element-with-list-children であるすべての element-with-list-children を選択します。これは、あなたの例ではそれらすべてを意味しますn=1 の場合、それ以外の場合は何もありません。バージョンと同じように動作させるには、括弧を追加する必要がありますdescendant::-(.//*[list])[$num]/list

于 2013-11-10T14:35:31.827 に答える