我的输入xml如下所示
<a>
<b>
<b1>ID1</b1>
<b2>text1</b2>
<b3>c10</b3>
<b3>c20</b3>
</b>
<b>
<b1>ID2</b1>
<b2>text2</b2>
<b3>c10</b3>
</b>
<b>
<b1>ID3</b1>
<b2>text3</b2>
<b3>c20</b3>
</b>
<c>
<c1>c10</c1>
<c2>text123<c2>
<c3>d10</c3>
</c>
<c>
<c1>c20</c1>
<c2>text123<c2>
<c3>d20</c3>
</c>
<d>
<d1>d10</d1>
<d2>text11</d2>
<d3>10</d3>
</d>
<d>
<d1>d20</d1>
<d2>text33</d2>
<d3>20</d3>
</d>
</a>
我想对相应<d3>
内的相应<d1>
值的<c>
值求和,该值最终属于<b>
。
输出应该看起来像
<b>
<b1>ID1</b1>
<b4>30</b4>
<b>
<b>
<b1>ID2</b1>
<b4>10</b4>
<b>
<b>
<b1>ID3</b1>
<b4>20</b4>
<b>
答案 0 :(得分:1)
您请求的输出格式不正确:它缺少根元素:
以下样式表:
XSLT 1.0
<?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:key name="c" match="c" use="c1" />
<xsl:key name="d" match="d" use="d1" />
<xsl:template match="/">
<a>
<xsl:for-each select="a/b">
<b>
<xsl:copy-of select="b1"/>
<b4>
<xsl:value-of select="sum(key('d', key('c', b3)/c3)/d3)"/>
</b4>
</b>
</xsl:for-each>
</a>
</xsl:template>
</xsl:stylesheet>
当应用于您的输入时(在更正未闭合的元素之后),将返回:
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b>
<b1>ID1</b1>
<b4>30</b4>
</b>
<b>
<b1>ID2</b1>
<b4>10</b4>
</b>
<b>
<b1>ID3</b1>
<b4>20</b4>
</b>
</a>
以下情况:
<b>
<b1>ID1</b1>
<b2>text1</b2>
<b3>c10</b3>
<b3>c10</b3>
</b>
总和的结果将是10,而不是 - 正如您可能期望的那样 - 20.有了这样一个抽象的例子,没有关于数据含义的线索,很难说是否这是正确的方法。