我需要将xml文件转换为csv文件。因此,我使用msxsl。xml文件如下所示:
(...)
<Test>
<Field1>Blabla</Field1>
<Values>
<Year>2012</Year>
<Value>12</Value>
</Values>
<Values>
<Year>2013</Year>
<Value>1234</Value>
</Values>
<Field2>abc</Field2>
</Test>
<Test>
<Field1>Blubblub</Field1>
<Field2>def</Field2>
</Test>
(...)这意味着:数据集"Test“有几个节点"Values",而其他数据集没有节点”Values“。
我试图用for-each来解决这个问题:
(...)
<xsl:for-each select="Test">
(...)
<xsl:for-each select="Values">
(...)
</xsl:for-each>
</xsl:for-each>
(...)这是可行的(在某种程度上),但数据集之间的列数不匹配。我需要在每个数据集中包含整个文件中每个节点的最大列数。
最后,我们应该能够打开csv文件与excel。因此,每列都需要包含相同的数据...有没有办法做到这一点?
谢谢!
编辑:在这种情况下,预期的csv-output将如下所示:
Blabla;2012;12;2013;1234;abc
Blubblub;;;;;def..。而不是:
Blabla;2012;12;2013;1234;abc
Blubblub;def发布于 2015-04-01 04:51:39
给定预期的CSV输出(实际上是SSV,似乎是分号分隔值),我认为您根本不需要内部for-each。我会更多地这样做:
<xsl:for-each select="Test">
<xsl:value-of select="Field1"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="Values[1]/Year"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="Values[1]/Value"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="Values[2]/Year"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="Values[2]/Value"/>
<xsl:text>;</xsl:text>
<!-- etc, up to the final... -->
<xsl:value-of select="Field2"/>
</xsl:for-each>这为您提供了固定数量的字段,在不存在节点的情况下具有空值。
https://stackoverflow.com/questions/29376979
复制相似问题