あなたが書いた:
基本的に for-each ループを考えたのですが、
ノードを処理する場合、 axsl:for-each
が必要になることはめったにありません。xsl:apply-templates
必要なノードを選択して使用します。一致するテンプレートがないと、デフォルトでノードの値 (テキスト) が吐き出されます。
<xsl:template match="slide">
<!-- just process selection of children -->
<xsl:apply-templates select="paragraph" />
</xsl:template>
<!-- add this in case you already have an identity template -->
<xsl:template match="paragraph">
<!-- select only the immediate text children (without <b> for instance) -->
<xsl:value-of select="text()" />
<!-- OR: select the value, incl. all children (using "node()" is equiv.) -->
<xsl:value-of select="." />
</xsl:template>
そしてあなたは書いた:
しかし、xsl:value-of 構造の中に何を入れればよいのでしょうか? ありがとう!
これはフォーカスに大きく依存します。フォーカスは通常、最初の祖先の命令xsl:template
またはによって設定されxsl:for-each
ます。フォーカスが にあると仮定すると<slideshow>
、式は次のようになります。
<xsl:value-of select="slide/paragraph" />
フォーカスが既に にparagraph
ある場合は、select="text()"
(すべてのテキストの子を選択しますが、それ以上は選択しません) またはselect="."
(現在のノードを選択し、子の値も取得します) を使用できます。
ただし、より回復力のあるアプローチについては、上記を参照してください。apply-templates を使用すると、変更と保守性のためのコーディングが容易になります。