【发布时间】:2015-06-05 06:50:01
【问题描述】:
我需要将 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>
(...)
这意味着:有数据集“测试”具有多个节点“值”,而其他数据集则没有。
我尝试用 for-each 解决这个问题:
(...)
<xsl:for-each select="Test">
(...)
<xsl:for-each select="Values">
(...)
</xsl:for-each>
</xsl:for-each>
(...)
这可行(在某种程度上),但数据集之间的列数不匹配。我需要在每个数据集中为整个文件中的每个节点设置最大列数。
最后应该能够用 excel 打开 csv 文件。因此,每一列都需要包含相同的数据...有什么办法可以做到这一点?
谢谢!
编辑:在这种情况下,预期的 csv 输出将如下所示:
Blabla;2012;12;2013;1234;abc
Blubblub;;;;;def
...而不是:
Blabla;2012;12;2013;1234;abc
Blubblub;def
【问题讨论】:
-
如果我们可以看到转换示例的预期输出,这可能会更清楚。
-
excel 将打开一个 xml 文件,可能仍需要转换,但它可能不那么痛苦。
-
我已经添加了预期的 csv 输出。 Excel 无法打开这些 xml 文件。我们不知道,为什么 - 使用 msxsl 是替代解决方案...
-
可以假设每个
<Values>元素都包含两个值吗?并且在每个<Test>元素中重复这两个“字段”? -
是的,每个
元素都包含相同的两个值,并且这两个字段在每个 元素中都重复。此外,我们知道, 在 元素中出现 0 到 10 次。