我有下一个xml:
<page> <document> <id>1001</id> <cur>USD</cur> <date>01.01.2009</date> <amount>10</amount> </document> <document> <id>1001</id> <cur>USD</cur> <date>02.01.2009</date> <amount>15</amount> </document> <document> <id>1001</id> <cur>JPY</cur> <date>01.01.2009</date> <amount>5</amount> </document> <document> <id>1002</id> <cur>USD</cur> <date>01.01.2009</date> <amount>5</amount> </document> ... </page>
我需要将其转换为html.记录应按id和cur分组.并且应在每组之后显示总量.所以我们想要这样的东西:
Bill: id=1001,cur=USD date=01.01.2009 amount=10 date=02.01.2009 amount=15 total amount=25 Bill: id=1001,cur=JPY date=01.01.2009 amount=5 total amount=5 Bill: id=1002,cur=USD date=01.01.2009 amount=5 total amount=5 ...
如何使用XSL实现这一目标?
当我试图在谷歌找到答案时,我发现了Muenchian方法,但是当我们想要将结果分组为2个字段时,它太复杂了.我是xsl的初学者,这对我来说有点困难.
我还为每个组找到了xslt 2.0运算符.主流浏览器是否支持?通常是使用它还是我们应该只依赖xslt 1.0?
您可以使用XSLT 1.0执行此操作
我在这里使用的方法是创建一个具有两个字段id和cur的复合键.我稍后将模板应用于每个组中的第一个文档.在模板中,我然后遍历各个文档,最后我总结了文档数量字段.
<?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="idcur" match="document" use="concat(id,cur)"/> <xsl:template match="/page"> <xsl:apply-templates select="document[generate-id() = generate-id(key('idcur',concat(id,cur))[1])]"/> </xsl:template> <xsl:template match="document"> <xsl:variable name="document" select="key('idcur',cur))"/> Bill: id=<xsl:value-of select="id"/>,cur=<xsl:value-of select="cur"/> <xsl:for-each select="$document"> date=<xsl:value-of select="date"/> amount=<xsl:value-of select="amount"/> </xsl:for-each> total amount=<xsl:value-of select="sum($document/amount)"/> </xsl:template> </xsl:stylesheet>
输出:
Bill: id=1001,cur=USD date=01.01.2009 amount=5 total amount=5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。