从命名模板中打印出xml标签

时间:2014-07-15 10:41:09

标签: xml xslt xslt-1.0

我输入了xml,如:

<XML>
    <A1>50</A1>
    <A2>20</A2>
    <A3>70</A3>
    <A4>90</A4>
    <A5>5</A5>
    <A6>45</A6>
    <A7>35</A7>
    <A8>25</A8>
    <A9>80</A9>
</XML>

XSLT规则可以使用它:

<xsl:template name="summfunc">
    <xsl:param name="summ"/>
    <xsl:param name="summands"/>
    <xsl:param name="output-text"/>
    <xsl:param name="output-node"/>
    <xsl:if test="format-number($summ, '#.##') !=format-number(sum($summands), '#.##')">
        <ERROR>
            <CODE>30</CODE>
            <TEXT><xsl:value-of select="$output-text"/></TEXT>
            <PROBLEMNODE>
                <xsl:value-of select="$output-node"/>
            </PROBLEMNODE>
        </ERROR>                    
    </xsl:if>
</xsl:template> 

<xsl:template match="/XML">

<xsl:variable name="tests">
    <xsl:call-template name="summfunc">
        <xsl:with-param name="summ" select="//A3"/>
        <xsl:with-param name="summands" select="//A1 | //A2"/>
        <xsl:with-param name="output-text">abrakadabra</xsl:with-param>
        <xsl:with-param name="output-node" select="//A3"/>  
    </xsl:call-template>    
    <!-- ... -->
</xsl:variable>     

<xsl:value-of select="$tests"/>
</xsl:template>

摘要我想打印:

        <ERROR>
            <CODE>30</CODE>
            <TEXT>some text</TEXT>
            <PROBLEMNODE>
                some text, containing node
            </PROBLEMNODE>
        </ERROR>

很多时候,作为模板&#34; summfunc&#34;有错误。这就是为什么我只是按原样打印$ tests,如果没有错误,它将是空的(但也许这不是一个好的解决方案)。

但它不会打印标签!我收到&#34; 30some text&#34;作为文本,如果有错误,它不会打印标签。当我尝试将标签放到xsl:text时,它就不起作用,即使我使用&#34;或&#39;。

如何正确打印?如果我将它们放在值=&#34; $ tests&#34;和/ xsl:template,但不管怎样,如果它们在命名模板中,它就不会打印标签。怎么解决?

1 个答案:

答案 0 :(得分:1)

如果您想&#34;打印标签&#34;,请使用 xsl:copy-of 而不是 xsl:value-of

所以,你需要做的就是这个

<xsl:copy-of select="$tests"/>

xsl:value-of 用于输出项目的文本值。