gpt4 book ai didi

perl - 在 Perl 中创建 XML 文件

转载 作者:行者123 更新时间:2023-12-04 05:02:20 24 4
gpt4 key购买 nike

我的输入文件是

TBLA      COLA      A    B    
TBLA COLB D E
TBLB COLX M N
TBLB COLD A B
TBLC COLD A B

要以 xml 格式创建的输出为
<Data>    
<TBLA>
<COLA>
<oldvalue>A</oldvalue>
<newvalue>B</newvalue>
</COLA>
<COLB>
<oldvalue>D</oldvalue>
<newvalue>E</newvalue>
</COLB>
</TBLA>
<TBLB>
<COLX>
<oldvalue>M</oldvalue>
<newvalue>N</newvalue>
</COLX>
<COLD>
<oldvalue>A</oldvalue>
<newvalue>B</newvalue>
</COLD>
</TBLB>
<TBLC>
<COLD>
<oldvalue>A</oldvalue>
<newvalue>B</newvalue>
</COLD>
</TBLC>
</Data>

任何人都可以建议什么是最好的方法来做到这一点。我应该先将此文本文件转换为哈希值,然后再尝试使用 pltoxml() .这有意义吗。可以 XML::SimpleXML::Writer够了。

这是我第一次使用 xml 并且不确定哪种方法可以有效地帮助我的解决方案。
一个小例子wrt我的要求将不胜感激。

*输入文件将始终按第一个字段排序

最佳答案

鉴于非常简单的数据结构,使用整个 XML 编写器似乎有点不必要。但是,我将假定表名和列名是有效的 XML 标记名。

这是一个简单的脚本,它读取数据而不将其存储在中间数据结构中。它适用于 perl5 v10 和更好的版本。

use strict; use warnings; use feature 'say';

my $last_table;
say '<Data>';
while(<>) {
chomp;
my ($table, $col, $old, $new) = split /\t/;
s/&/&amp;/g, s/</&lt;/g for $old, $new;
# I'll assume $table and $col have sane names
if (not defined $last_table) {
say " <$table>";
} elsif ($last_table ne $table) {
say " </$last_table>";
say " <$table>";
}
$last_table = $table;
say " <$col>";
say " <oldvalue>$old</oldvalue>";
say " <newvalue>$new</newvalue>";
say " </$col>";
}
say " </$last_table> if defined $last_table;
say '</Data>';

关于perl - 在 Perl 中创建 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com