如何将 CSV 文件转换为 XML?

如何将 CSV 文件转换为 XML?

如何将 CSV 文件转换为 XML?

有没有适合 Ubuntu 的软件?

答案1

当您知道文件的格式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

答案2

社区网站转换时,有一个指向命令行工具的链接,名为转为csv。由于它无人维护,您可能需要选择其他选项。

还有一个名为的 Java 工具转为csv(警告:网站是德语的)和一个名为的命令行工具ff-提取器

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

答案3

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

XMLSpear

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

在此处输入图片描述

它在大约 15 秒内为我转换了一个 31Mb 的 CSV 文件(来自 20,000 个条目的图书馆数据库的转储),并为我提供了一个格式良好的 XML 文件以供保存和操作。

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

XMLSpear 是供个人使用的免费软件。
请将您的反馈发送至[电子邮件保护]或者在论坛上http://donkeydevelopment.com/forums

商业使用必须获得 donkeydevelopment 的批准。
只需发送电子邮件至[电子邮件保护]主题为“许可证请求”。

自述文件还很有帮助地包含了 .desktop 文件的内容。

在 Ubuntu 18.04 LTS(Gnome)下,这项工作对我来说做得很好。

答案4

我建议你或其他人用 Python 写代码。Python 很容易学习,很容易解决你的问题。它兼具CSV 模块XML 模块。我的建议考虑到您可能需要为 XML 元素设置自己的名称或者有其他复杂要求(例如将最后一个 CSV 列转换为倒数第二列的属性)。

网上有大量关于 Python 的教程。

相关内容