我有输入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用于输出项目的文本值。