使用xsd将csv转换为xml

时间:2009-11-04 16:17:33

标签: xml xslt csv xsd

我正在尝试找到一种可重用的方法来获取CSV文件并从中生成符合指定XSD的XML文件。我还没有找到一个可重复使用的方法。我使用了Altova MapForce,它允许我导入CSV文件和XSD,进行映射而不是从中生成代码,但是只要XSD发生变化,代码就需要重新生成。 Altova也生产了很多代码。

我理想的解决方案是一组Java类,我可以将一个CSV文件提供给XSD,并从中获取XML文件。我找不到这样的东西,我正在考虑可能创造一些东西。

想法?这里有什么东西使用基于this问题的XSLT吗?

感谢。

5 个答案:

答案 0 :(得分:7)

这似乎很容易做到,但事实并非如此。 XML Schema是一种文档验证语言,而不是文档生成语言。它没有告诉你如何制作新文件;它会告诉您所制作的文件是否有效。从长远来看,这些并不是一回事。

例如,在XML Schema中创建一个由一系列可选选项组成的复杂类型是微不足道的。 foo元素可以包含barbaz子元素,然后是bazbat子元素,然后是foo,{{ 1}},或bar孩子。这使得规则可以确定这两个元素都是有效的:

bat

与此同时,该规则在确定如何获取数据项元组并从中创建<foo> <baz/> <baz/> <bar/> </foo> <foo> <foo> <bar/> </foo> </foo> 元素方面几乎没有帮助。

通常,当有人问这个问题时,他们会查看他们正在使用的一个或两个模式,这些模式定义了一个相对简单的文档结构。看起来很直观,应该很容易将这些模式用作映射过程的输入。它可能是。什么不容易,甚至可能是一个映射过程,可以将任何模式作为输入。

在我的项目中,我所做的是简化问题。我已经构建了使用CSV和XML并支持模式验证的程序,但在这些程序中,模式是输出。我已经定义了一个简单的XML元数据格式,例如:

foo

然后我可以使用该元数据来控制CSV输入中的XML生成,我也可以 使用它来生成我的程序生成的XML将符合的模式。如果我更改了元数据,我的XML和架构会相应更改。

当然,如果模式真的是您的流程的输入(例如,它们是由第三方提供的),这甚至不会开始帮助您。

答案 1 :(得分:2)

嗯,我真的没有一个现成的,开箱即用的解决方案,但也许:

  • 使用FileHelphers等库读取您的CSV文件;为此,您需要创建一个类MyDataType来描述CSV中的列,并获得一个MyDataType

  • 的数组
  • 如果使用适当的XML序列化属性(如[XmlIgnore][XmlAttribute]等)修饰该类,您可能只需序列化生成的{{1}数组进入符合XML模式的XML

  • 或者如果这不起作用,您可以创建另一个映射到XML要求的类(从您拥有的XSD生成它),只需定义两种类型MyDataType之间的映射。 (来自您的CSV)和MyDataType(针对您的XML)AutoMapper

它不是锅炉 - 但相当接近,你可以把它作为一个“框架”,只需简单地插入你自己的类型(如果你需要经常这样做)。

答案 2 :(得分:1)

如果您的XSLT引擎符合XSLT版本2,那么最好的解决方案就在这里:

答案 3 :(得分:0)

您拥有的是一个“表”(CSV文件),其中包含(可能)表示(可能)分层数据模型的非规范化行。您希望将其映射到基于XSD的任意分层XML文档。

您需要一个工具,可以将分组键列映射到XML元素,并指定哪些数据列包含哪些属性/子元素。这是一个相当重要的问题,除非你的映射是微不足道的。

您可以发布一些CSV和XSD的样本吗?这可能有助于获得更有针对性的答案。

答案 4 :(得分:0)

Microsoft Excel能够导出XML:http://office.microsoft.com/en-us/excel-help/export-xml-data-HP010206401.aspx

我在创建可导出的XSD格式时遇到了一些问题,但是一旦你开始工作,这是一个非常棒的工具。