如何将CSV文件转换为XML?


Answers:


7

社区网站上进行转换时,有一个名为csv2xml的命令行工具的链接。由于未维护,您可能需要选择其他选项。

还提到了一个名为csv2xml的Java工具(警告:网站为德语)和一个名为ff-extractor的命令行工具。

该链接还引用了Python,Perl,PHP,XSLT,但这意味着您需要自己编写转换器的代码。


1
我对第一个链接中的引用进行了更新。还有一种名为Altova的商业产品(altova.com)。
Rinzwind

10

当您知道csv文件的格式以及文件中所需的结构时xml,就可以很容易地创建一个可以处理转换的脚本。

取文件simple.csv

Jack,35,United States
Jill,22,United Kingdom

您可以创建以下xml文件:

<?xml version="1.0"?>
<Customers>
  <Customer>
    <Name>Jack</Name>
    <Age>35</Age>
    <Country>United States</Country>
 </Customer>
 <Customer>
    <Name>Jill</Name>
    <Age>22</Age>
    <Country>United Kingdom</Country>
 </Customer>
</Customers>

使用以下脚本:

#!/bin/bash
file_in="simple.csv"
file_out="simple.xml"
echo '<?xml version="1.0"?>' > $file_out
echo '<Customers>' >> $file_out
while IFS=$',' read -r -a arry
do
  echo '  <Customer>' >> $file_out
  echo '    <Name>'${arry[0]}'</Name>' >> $file_out
  echo '    <Age>'${arry[1]}'</Age>' >> $file_out
  echo '    <Country>'${arry[2]}'</Country>' >> $file_out
  echo '  </Customer>' >> $file_out
done < $file_in
echo '</Customers>' >> $file_out

即使您以前从未编写过代码,我也认为它应该易于使用和修改。在while循环中逐行读取文件。

IFS是内部字段说明符。该IFS=$','声明字段分隔符的值是一个逗号。这是CSV文件的标准配置,但可以根据需要进行更改以匹配输入文件格式。

该命令的-r参数read告诉它将文件中的任何反斜杠都视为数据的一部分,而不是对后面的特殊字符进行转义。

-a arry参数将文件的每一列放入一个数组(名为arry)。此示例中的列是名称,年龄,国家/地区。换句话说,逗号之间的值。因此,该行中的每一列都存储在一个数组中。

然后,所需的文本xml仅将值包裹起来,并使用将该xml行追加到输出文件echo


@chaskes,如果您将解释在line中使用的选项while IFS=$',' read -r -a arry ,则对于另一个选项很有用。谢谢。
alhelal

@BandaMuhammadAlHelal完成。
chaskes

您将如何处理出现在字段中并用双引号引起来的逗号?在输入文件"Somename, Jack"中代替Jack
muk.li

1
@ muk.li输入字段分隔符(通常是逗号)在以下行开始标记:while IFS = $','。假设分隔符是一个星号,您只需将其更改为:$'*'。因此,在您的情况下,它应该是$'“'(单引号,双引号,单引号)。这应该可以正常工作,但是在shell中引号可能会比较棘手,并且我没有机会对其进行测试。
chaskes

1

CSV到XML转换挑战的一种相当用户友好的(即,对于像我这样的小伙子来说很容易)的解决方案是使用一个内置了此功能的漂亮的跨平台 XML编辑器。(我在Ubuntu和Mac OSX 10.10.5下都使用过它;它也具有Windows可执行文件。)

XMLSpear

如前所述,它是一个XML编辑器,但是在其主菜单上包括CSV到XML(和Excel到XML)“导入”:

在此处输入图片说明

它在大约15秒内为我转换了一个31Mb的CSV文件(从20,000个条目的库数据库中转储),从而为我提供了一个格式正确的XML文件以进行保存和操作。

作为编辑者,它还有许多其他受欢迎的功能(在上面的链接中有详细信息)。我找不到提及它的任何许可证,但这包含在“自述文件”中:

XMLSpear是供个人使用的免费软件。
请将您的反馈发送至xmlspear@donkeydevelopment.com或在论坛上http://donkeydevelopment.com/forums

商业用途必须经驴开发批准。
只需将主题为“许可证请求”的电子邮件发送至xmlspear@donkeydevelopment.com。

自述文件还有助于包含.desktop文件的内容。

在Ubuntu 18.04 LTS(Gnome)下对我来说做得很好。



0

我建议您或某人用Python编写代码。Python易于学习,可以轻松解决您的问题。它同时具有CSV模块XML模块。我的建议考虑到您可能需要为XML元素使用自己的名称或有其他复杂的要求(例如将最后一个CSV列转换为最后一个但只有一个列的属性)。

在线上有大量关于Python的教程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.