通过xsl(msxsl)进行xml转换



我需要将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",而其他数据集则没有。

我试着用来解决这个问题

(...)
<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

和NOT:

Blabla;2012;12;2013;1234;abc
Blubblub;def

考虑到您期望的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>

这将为您提供固定数量的字段,在不存在节点的情况下使用空值。

相关内容

  • 没有找到相关文章

最新更新