in reply to Re: copy XML elements from one file to another
in thread copy XML elements from one file to another

Here is my code:

use XML::LibXML; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file("FILE1.xml"); my @nodes_from_file1 = $doc->findnodes('//Feature'); my $new = XML::LibXML::Document->new('1.0', 'utf-8'); my $features = $new->createElement( 'Features' ); #print to debug print $features->toString; my $file1 = $new->createElement( 'File1' ); for my $node (@nodes_from_file1) { $file1->addChild( $node ); #print to debug print $file1->toString; } $features->addChild( $file1 ); print $new->toString; $new->toFile("output_new.xml")

Replies are listed 'Best First'.
Re^3: copy XML elements from one file to another
by tangent (Parson) on Nov 26, 2013 at 17:30 UTC
    I can't see the line $new->addChild($features);

    You need to include the format argument 2 in $new->toFile("output_new.xml",2) and print $new->toString(2);

      Thanks for your effort everything seem to be ok now. Just one last thing. The following is my current output.

      <?xml version="1.0" encoding="utf-8"?> <LINE Value="some_text"> <status/> <FEATURES/> <File1_data> <ABC id="1"> <Feature> <Number>im from file 1</Number> <Prefix>419</Prefix> <Alt>73924/</Alt> </Feature> </ABC> <ABC id="2"> <Feature> <Number>im from file 1</Number> <Prefix>826</Prefix> <Alt>27800</Alt> </Feature> </ABC> <ABC id="3"> <Feature> <Number>im from file 1</Number> <Prefix>827</Prefix> <Alt>26433</Alt> </Feature> </ABC> </File1_data> </LINE>

      as you can see that </ABC> (copied from Files_1 as a node) is not aligned properly so I just would like to learn how I can create nested elements and close them properly.
      I have seen lots of examples but nothing is nested in the way I need it. I have tried many times but not sure whats going on. Following is what I need to get.

      <?xml version="1.0" encoding="utf-8"?> <LINE Value="some text"> <status/> <FEATURES> <File1_data> <ABC id="1"> <Feature> <Number>im from file 1</Number> <Prefix>419</Prefix> <Alt>73924/</Alt> </Feature> </ABC> <ABC id="2"> <Feature> <Number>im from file 1</Number> <Prefix>826</Prefix> <Alt>27800</Alt> </Feature> </ABC> <ABC id="3"> <Feature> <Number>im from file 1</Number> <Prefix>827</Prefix> <Alt>26433</Alt> </Feature> </ABC> </File1_data> </FEATURES> </LINE>

      sorry for asking to much but any idea if I can access the elements Im copying and modify its name?
      for example lets say I would like to add numbers to the Features elements im copying i.e <Feature 1> <Feature 2>....etc.