14

ID テンプレートは次のようになります。

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<xsl:apply-templates select="@*|node()" />以上を選択しますか<xsl:apply-templates />、それとも ID テンプレートがこのようなものであった可能性がありますか?

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>

次の操作を行うと、正確には何が選択されますか?

<xsl:apply-templates />
4

3 に答える 3

19

<xsl:apply-templates select="@*|node()" />以上を選択 しますか<xsl:apply-templates />、それとも ID テンプレートがこのようなものであった可能性がありますか?

<xsl:apply-templates/> 

次と同等です。

<xsl:apply-templates select="node()"/>

これは次の短い前者です。

<xsl:apply-templates select="child::node()"/>

これは次と同等です。

<xsl:apply-templates select="* | text() | comment() | processing-instruction()"/>

最後の命令からわかるように、xsl:apply-templates質問している命令は属性を選択しないため、次の省略形として使用することはできません。

<xsl:apply-templates select="@*|node()"/>
于 2012-10-03T12:00:28.867 に答える
5

のデフォルトの選択<xsl:apply-templates/>は just"node()"で、属性は含まれません。

于 2012-10-03T11:37:28.833 に答える
2

apply-templatesのデフォルトの選択はです。node()これは の省略形ですchild::node()。この XPath 式は次のように評価されます。

  • まず、「子」のすべてのノードが取得されます。これはすべて、現在の要素の直接の子、つまり他の要素、テキスト、およびコメントですが、属性ではありません。
  • 次に、このノード セットは、ノード テスト「node()」でフィルタリングされます。この場合、そのテストはすべてに一致するため、エレメントはフィルタリングされません。

その<xsl:apply-templates />ため、子要素のテンプレートは適用されますが、属性には適用されません。コピー テンプレートの場合、これは属性がコピーされないことを意味します。

于 2012-12-06T18:15:38.737 に答える