0

XSLTの助けが少し必要です。実際の出力が私の期待した出力と異なる理由を理解できませんでした。どんな助けでも大歓迎です!

XML

<?xml version="1.0"?>
<a>
  <b c="d"/>
  <b c="d"/>
  <b c="d"/>
</a>

XSL

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="foo">
        <xsl:param name="content"></xsl:param>
        <xsl:value-of select="$content"></xsl:value-of>
    </xsl:template>

    <xsl:template match="/">
        <xsl:call-template name="foo">
            <xsl:with-param name="content">
                <xsl:for-each select="a/b">
                    <e>
                        <xsl:value-of select="@c" />
                    </e>
                </xsl:for-each>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:template>

実際の出力

<?xml version="1.0"?>
ddd

必要な出力

<?xml version="1.0"?>
<e>d</e>
<e>d</e>
<e>d</e>

注:テンプレートの呼び出しは必須です。私の状況では、テンプレートは拡張機能でより多くのことを行います。

4

2 に答える 2

1

ABachの言うこととは反対に、あなたxsl:paramは大丈夫です。変更する必要があるのはあなただけですxsl:value-of。それは:である必要がありxsl:copy-ofます

<xsl:template name="foo">
    <xsl:param name="content"/>
    <xsl:copy-of select="$content"/>
</xsl:template>
于 2012-10-27T03:59:56.803 に答える
0

あなたはとても近くにいます。テンプレート内での相対的な配置と正しいパラメーターの使用法を混同しました。これが少し修正された答えです。

このXSLTの場合:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes" />
  <xsl:strip-space elements="*" />

  <xsl:template name="foo">
    <xsl:param name="pContent" />
    <xsl:for-each select="$pContent">
      <e>
        <xsl:value-of select="@c" />
      </e>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="/*">
    <xsl:call-template name="foo">
      <xsl:with-param name="pContent" select="*" />
    </xsl:call-template>
  </xsl:template>

</xsl:stylesheet>

...元のXMLに適用されます:

<?xml version="1.0"?>
<a>
  <b c="d" />
  <b c="d" />
  <b c="d" />
</a>

...目的の結果が生成されます:

<?xml version="1.0"?>
<e>d</e>
<e>d</e>
<e>d</e>

<xsl:param>特に、相対位置に基づいてノードを含めるの正しい使用法に注意してください。あなたの場合、ノードの内容を希望どおりに変更するのではなく、渡すパラメーターのテキスト値を出力するようにXSLTパーサーに指示しています。

于 2012-10-27T03:03:49.157 に答える