你能帮我调试一下,找出错误来源吗? 我想在xml中找到两个元素的平均值,并将其添加到最终的xml中 我可能会做一些根本错误的事情,请你帮忙。
提前致谢。 fornula s =(c + d)/ 2
Xml文件
<?xml version="1.0" encoding="UTF-8"?>
<top>
<Results>
<a>no</a>
<b>12</b>
<c>12</c>
<d>9</d>
</Results>
<Results>
<a>yes</a>
<b>8</b>
<c>50</c>
<d>12</d>
</Results>
<Results>
<a>no</a>
<b>6</b>
<c>55</c>
<d>56</d>
</Results>
<Results>
<a>yes</a>
<b>23</b>
<c>32</c>
<d>34</d>
</Results>
</top>
xsl文件
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="x" select="//c"/>
<xsl:variable name="y" select="//d"/>
<xsl:template match="b">
<xsl:call-template name="identity"/>
<s>
<xsl:value-of select="($x + $y) div 2"/>
</s>
</xsl:template>
</xsl:stylesheet>
期待输出
<?xml version="1.0"?>
<top>
<Results>
<a>no</a>
<b>12</b>
<s>10.5</s>
<c>12</c>
<d>9</d>
</Results>
<Results>
<a>yes</a>
<b>8</b>
<s>31</s>
<c>50</c>
<d>12</d>
</Results>
<Results>
<a>no</a>
<b>6</b>
<s>55.5</s>
<c>55</c>
<d>56</d>
</Results>
<Results>
<a>yes</a>
<b>23</b>
<s>33</s>
<c>32</c>
<d>34</d>
</Results>
</top>
上面的代码和输入是模拟真实数据集的示例。因此,我正在寻找识别此代码中的错误,这是更大代码的一部分。 任何帮助都会受到高度关注。
答案 0 :(得分:2)
你觉得太复杂了。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Results">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<s><xsl:value-of select="(sum(c) + sum(d)) div 2" /></s>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果您坚持使用<Results>
元素中的子订单,请使用
<xsl:template match="Results">
<xsl:copy>
<xsl:apply-templates select="@* | a | b" />
<s><xsl:value-of select="(sum(c) + sum(d)) div 2" /></s>
<xsl:apply-templates select="c | d" />
</xsl:copy>
</xsl:template>
如果一个组中只有一个<c>
和<d>
,这就足够了:
<xsl:value-of select="(c + d) div 2" />
答案 1 :(得分:0)
我想我已经找到了解决报告问题的方法。
问候
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="b">
<xsl:call-template name="identity"/>
<xsl:variable name="x" select="../c"/>
<xsl:variable name="y" select="../d"/>
<s><xsl:value-of select="($x + $y) div 2"/></s>
</xsl:template>
</xsl:stylesheet>