从命名模板打印出xml标记



我有输入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>

模板"summfunc"多次出错。这就是为什么我只是打印$tests,如果没有错误,它将是空的(但也许这不是一个好的解决方案)。

但是它不打印标签!我收到"30some文本"作为文本,如果有错误,它不打印标签。当我尝试在xsl:text中添加标签时,它不起作用,即使我使用"或" .

如何正确打印?如果我将标签放在value-of select="$tests"和/xsl:template之间,它将完美地打印标签,但不知何故,如果标签位于命名模板中,它就不打印标签。如何解决?

如果要"打印标签",请使用xsl:copy-of而不是xsl:value-of

那么,你所需要做的就是写入

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

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

相关内容

  • 没有找到相关文章

最新更新