如何将函数应用于元素值并输出结果
这是我的来源
<tests>
<test>
<row name="C/A">-0.1</row>
<row name="C/B">-0.2</row>
<row name="C/C">Text1</row>
</test>
<test>
<row name="C/A">1.1</row>
<row name="C/B">2.2</row>
<row name="C/C">Text2</row>
</test>
</tests>
样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="test/row[@name='C/A'] | test/row[@name='C/B']">
<xsl:copy>
<xsl:value-of select=". * 1000"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我想在具有属性&#34; C / A&#34;的行上调用函数。和&#34; C / B&#34;。 在我的示例样式表中,我乘以1000(但是我想应用更复杂的公式)。
这是理想的结果
<tests>
<test>
<row name="C/A">-100</row>
<row name="C/B">-200</row>
<row name="C/C">Text</row>
</test>
<test>
<row name="C/A">1100</row>
<row name="C/B">2200</row>
<row name="C/C">Text</row>
</test>
</tests>
这是我的输出,name属性未被复制。另外,我如何对行值进行函数并返回结果。例如,乘数可能取决于&#39;行&#39;值
<?xml version="1.0" encoding="UTF-8"?>
<tests>
<test>
<row>-100</row>
<row>-200</row>
<row name="C/C">Text1</row>
</test>
<test>
<row>1100</row>
<row>2200</row>
<row name="C/C">Text2</row>
</test>
</tests>
感谢您的时间
答案 0 :(得分:2)
要复制属性,只需添加一行以将其选择为模板
<xsl:template match="test/row[@name='C/A'] | test/row[@name='C/B']">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:value-of select=". * 1000"/>
</xsl:copy>
</xsl:template>
在应用函数方面,请考虑使用命名模板...
<xsl:template match="test/row[@name='C/A'] | test/row[@name='C/B']">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:call-template name="myFunction" />
</xsl:copy>
</xsl:template>
<xsl:template name="myFunction">
<xsl:param name="value" select="." />
<xsl:value-of select="$value * 1000"/>
</xsl:template>
这使用当前节点的值作为默认值,但如果需要,您可以传入不同的参数值。