1

この種の XML 構造があり、両方の段落セクションに何が含まれているかを出力する必要があります。どうやってするか?基本的には for-each ループで考えたのですが、 xsl:value-of 構造の中に何を入れればいいのでしょうか? ありがとう!

   <slideshow>
        <slide id="A1">
            <title>XML techniques</title>
            <paragraph> Slideshow prepresents different kind of <bold>XML</bold> techniques </paragraph>
            <paragraph> Most common XML Techniques are </paragraph>
4

2 に答える 2

2

あなたが書いた:

基本的に 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 を使用すると、変更と保守性のためのコーディングが容易になります。

于 2015-09-26T15:16:48.920 に答える