管道分隔文本到xml转换

时间:2011-03-18 06:57:28

标签: perl shell

我有一个文本文件,我需要将其转换为xml。文本的第一行包含将作为xml标记的标题。其他每行都将作为xml标记的值。示例输入(ABC.txt):

ID|Name|Subject|Marks
12|Sam|PHY,MATH|60
13|Gan|CHY|70
25|Rane|PHY|78

这将转换为Output.xml

<Record>
  <ID>12</ID>
  <Name>Sam</Name>
  <Subject>PHY,MATH</Subject>
  <Marks>60</Marks>
</Record>
<Record>
  <ID>13</ID>
  <Name>Gan</Name>
  <Subject>CHY</Subject>
  <Marks>70</Marks>
</Record>
<Record>
  <ID>25</ID>
  <Name>Rane</Name>
  <Subject>PHY</Subject>
  <Marks>78</Marks>
</Record>

是否存在任何可以实现相同的模块,如XML :: CSV?

谢谢,

3 个答案:

答案 0 :(得分:4)

Text::CSV中读取ABC.txt(设置适当的分隔符),将其转换为hasref并使用XML::Simple写出

答案 1 :(得分:2)

XML::Simple在这里会很好用;创建数据的hashmap,将其提供给XML :: Simple,然后调用XMLout。你要做的唯一真正的工作就是将你的线路按到哈希图中......拆分为'|'得到田地,你就是那里的大部分。

答案 2 :(得分:0)

您可以设置一个包含CSV内容的临时文件,并将其提供给XML::CSV

 #!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;

open my $fh, '<', "abc.txt" or die "can't open input";
my @in_content = <$fh>;
close $fh;

my @tmp;
open my $out, '>', "temp.txt" or die "can't open tempfile";
foreach my $in(@in_content){
  print {$out} join(';', split(/\|/,$in));
}

close $out;

# now, you can use temp.txt as input for XML::CSV