9

この質問への回答に誤りがあると思い、指摘しました。私は間違っていると言われ、私の答えは後で削除されました。

どう間違っていたのか、いまだにわかりません。したがって、私はここに投稿し、誰かが私の誤解を説明してくれることを願っています.

私が回答した回答では、apply-template の使用について説明しました。次の XML と XSL が含まれており、テンプレートがどのように一致するかを説明しています。

<!-- sample XML snippet -->
<xml>
  <foo /><bar /><baz />
</xml>

<!-- sample XSLT snippet -->
<xsl:template match="xml">
  <xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>

<xsl:template match="foo"> <!-- will be called once -->
  <xsl:text>foo element encountered</xsl:text>
</xsl:template>

<xsl:template match="xml/*"> <!-- will be called twice -->
  <xsl:text>other element countered</xsl:text>
</xsl:template>

私のコメントは、最後のテンプレートは次のようにする必要があるというものでした:

<xsl:template match="*"> <!-- will be called twice -->
  <xsl:text>other element countered</xsl:text>
</xsl:template>

現在のノードはすでに<xml>

私が言われた:

いいえ、xml/* は、xml という名前の要素の子要素に一致するパターンです。

元の回答のテスト

ただし、この XML では:

<xml>
  <foo /><bar /><baz />
</xml>

そして、この XSL スタイルシート (上記のスニペットに記入):

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

<xsl:template match="xml">
  <xsl:apply-templates select="*" /> <!-- three nodes selected here -->
</xsl:template>

<xsl:template match="foo"> <!-- will be called once -->
  <xsl:text>foo element encountered.&#xa;</xsl:text>
</xsl:template>

<xsl:template match="xml/*"> <!-- will be called twice -->
  <xsl:text>other element countered.&#xa;</xsl:text>
</xsl:template>

</xsl:stylesheet>

私は得る:

other element countered.
other element countered.
other element countered.

「修正済み」バージョンのテスト

最後のテンプレートを次のように置き換えると:

<xsl:template match="*"> <!-- will be called twice -->
  <xsl:text>other element countered.&#xa;</xsl:text>
</xsl:template>

私の答えによると、次のようになります。

foo element encountered.
other element countered.
other element countered.

これは正しいように見えます。

私の質問がガイドラインに違反していないことを願っていますが、私が間違っていることがわかりません。誰かがそれをより完全に説明できることを願っています.

PS。残念ながら、コメントを投稿するのに十分なポイントがまだないため、他の質問に対する最初の回答はコメントではなく回答として投稿されました。どうするのが一番いいのか分からなかった…

4

2 に答える 2