0

私の質問に関連して

position()関数は、ドキュメント全体での実際のノードの位置を返します。選択したノードに関する位置を取得する方法です。100 の都市のリストがあり、指定されたフィルター リストに基づいて 10 を除外するとします (質問を参照してください)。II は、元のドキュメントの位置ではなく、選択したノードに基づいてカウントを取得したいと考えています。

簡単に言えば、これはカウンター/インクリメントの問題であり、カウンターは不可能です。選択したノード内のノードの位置を取得するために position() のような既存の関数を作成または使用するにはどうすればよいでしょうか。

私の質問が明確であることを願っています。

サンプルシナリオを編集

  <xsl:template match="/">
    <xsl:apply-templates select="db:databaseChangeLog/db:changeSet[*[1][($excludes eq '' or not(@tableName = tokenize($excludes, ',')))]]"/> 
  </xsl:template>

   <xsl:template match="db:changeSet">
      ...
   </xsl:template>

子ノードの属性名に基づいて親ノードを選択している場所。

4

2 に答える 2

1

関数の説明positionが間違っています。http://www.w3.org/TR/xslt20/#focusを参照してください。特に、「コンテキスト位置は、現在処理されている一連のアイテム内のコンテキスト アイテムの位置です。コンテキスト アイテムが変更されるたびに変更されます。 xsl:apply-templates や xsl:for-each などの命令が一連のアイテムを処理するために使用され、シーケンスの最初のアイテムはコンテキスト位置 1 で処理され、2 番目のアイテムはコンテキスト位置 2 で処理されます。 on.] コンテキスト位置は、XPath 式 position()" によって返されます。

たとえば、テンプレートに一致する要素で関数<xsl:apply-templates select="cities/city[not(@abbr = $skip/abbr)]"/>を使用し、次のように使用する場合positioncity

<xsl:template match="city">
  <xsl:copy>
    <xsl:value-of select="position()"/>
  </xsl:copy>
</xsl:template>

などを取得<city>1</city><city>2</city>します。

于 2013-08-16T12:09:38.170 に答える