如何将两个XML文件与Perl结合使用?

joe*_*joe -4 xml perl

我想将多个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)

Rob*_*rød 6

#!/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