如何将 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
答案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)下,这项工作对我来说做得很好。