我想将多个XML文件合并到Perl中的单个XML文件中.
档案1:
<r1>
<searchpath>
<dir>/usr/bin</dir>
<dir>/usr/local/bin</dir>
<dir>/usr/X11/bin</dir>
</searchpath>
</r1>
Run Code Online (Sandbox Code Playgroud)
文件2:
<r2>
<user login="grep" fullname="Gary R Epstein" />
<user login="stty" fullname="Simon T Tyson" />
</r2>
Run Code Online (Sandbox Code Playgroud)
合并文件
<XML>
<r1>
<searchpath>
<dir>/usr/bin</dir>
<dir>/usr/local/bin</dir>
<dir>/usr/X11/bin</dir>
</searchpath>
</r1>
<r2>
<user login="grep" fullname="Gary R Epstein" />
<user login="stty" fullname="Simon T Tyson" />
</r2>
</XML>
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new();
my $xml1 = $parser->parse_string( <<'XML' );
<r1>
<searchpath>
<dir>/usr/bin</dir>
<dir>/usr/local/bin</dir>
<dir>/usr/X11/bin</dir>
</searchpath>
</r1>
XML
my $xml2 = $parser->parse_string( <<'XML' );
<r2>
<user login="grep" fullname="Gary R Epstein" />
<user login="stty" fullname="Simon T Tyson" />
</r2>
XML
my $new_xml = XML::LibXML::Element->new( 'XML' );
$new_xml->appendWellBalancedChunk( $xml1->documentElement()->toString() );
$new_xml->appendWellBalancedChunk( $xml2->documentElement()->toString() );
print $new_xml->toString(1);
Run Code Online (Sandbox Code Playgroud)
如果您的数据是文件而不是字符串,您还可以使用$ parser-> parse_file($ filename)(请参阅perldoc XML :: LibXML :: Parser).
$ new_xml-> toString(1)中的1是正确缩进输出.有关该信息,请参阅perldoc XML :: LibXML :: Node.
在这里分叉:http://github.com/robinsmidsrod/xml-merge