0 我有像这样的xml
<rows>
<row type="first" month="jan" value="3"/>
<row type="first" month="feb" value="4"/>
<row type="first" month="march" value="32"/>
<row type="second" month="jan" value="5"/>
<row type="second" month="march" value="6"/>
</rows>
我将它与xslt转换为excel文件,我希望我的excel文件看起来像这样:
jan feb march
first 3 4 32
second 5 6
我想在分组中通过分组进行,但它不起作用。我读过类似于使用模板的内容,但我没有使用xslt的经验而且我不知道如何开始。
有人可以帮忙吗?
答案 0 :(得分:0)
我假设你想要csv输出,它可以由Excel导入并转换为Excel格式(.xls或.xlsx)。如果这是你想要的,那么这个XSLT 2.0样式表......
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
version="2.0">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="rows">
<xsl:text>type,</xsl:text>
<xsl:variable name="months" as="xs:string*" select="fn:distinct-values( row/@month)" />
<xsl:value-of select="$months" separator="," />
<xsl:text>

</xsl:text>
<xsl:for-each-group select="row" group-by="@type">
<xsl:value-of select="concat(current-grouping-key(),',')" />
<xsl:value-of select="
for $m in $months return
concat( current-group()[@month eq $m]/@value,'')"
separator="," />
<xsl:value-of select="'

'" />
</xsl:for-each-group>
</xsl:template>
</xsl:transform>
...当应用于此输入文档时......
<rows>
<row type="first" month="jan" value="3"/>
<row type="first" month="feb" value="4"/>
<row type="first" month="march" value="32"/>
<row type="second" month="jan" value="5"/>
<row type="second" month="march" value="6"/>
</rows>
...将生成此csv文件,该文件可导入MS Excel ...
type,jan,feb,march
first,3,4,32
second,5,,6
可以使用zip程序的帮助转换为xlsx,因为xlsx只是一个包含xml文件的zip文件。如果这是您想要的,请告诉我们。
关于如何开始使用XSLT的更一般性问题,我建议您购买和阅读一本书。如果你搜索StackOverflow,已经有一些问题需要书籍推荐,并有很多答案。