Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: How to fetch a portion of a XML file to save it in another xml file

by Your Mother (Chancellor)
on Sep 05, 2013 at 18:55 UTC ( #1052615=note: print w/ replies, xml ) Need Help??


in reply to How to fetch a portion of a XML file to save it in another xml file

Note, I closed your suite for you.

use strictures; use XML::LibXML; my $before = <<""; <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Automation Suite" verbose="1" parallel="false"> <test name="Configuration Restore Test Suite"> <classes> <class name="com.qa.testsuite.ConfigurationRestoreTests" /> </classes> </test> <test name="Import Test Suite"> <classes> <class name="com.qa.testsuite.ImportTests" /> </classes> </test> </suite> my $doc = XML::LibXML->new->load_xml( string => $before ); my ( $test_suite ) = $doc->findnodes('/suite/test[@name="Import Test S +uite"]'); $doc->setDocumentElement( $test_suite ); print $doc->serialize; # or $doc->toFile(...)

This may or may not be sane given the DTD but it gives the output you want. Update, there is a toFile() method for the doc.


Comment on Re: How to fetch a portion of a XML file to save it in another xml file
Select or Download Code
Re^2: How to fetch a portion of a XML file to save it in another xml file
by tarunmudgal4u (Sexton) on Sep 06, 2013 at 12:05 UTC

    Thanks for your input. It's working partially. In case, if I want to add multiple test nodes based on user choice how can I do that. In this example, I can extract only one node based on XPath.

    Also, I want to include suite node in the new.xml file.

      I do think it's time for you to start reading the XML::LibXML docs. See if you can at least get the multiple test nodes captured/found, it's quite a small adjustment. Post what you come up with and if you can't work it all out, I or someone will help you finish.

      Oh, ok! You wore me out and I wrote it yesterday and there's no reason for it to die of bitrot in some corner of my disk. I do hope you will try to pick up a little of it and not just get others to write it for you.

      my $doc = XML::LibXML->new->load_xml( string => $before ); my @tests = $doc->findnodes('/suite/test[@name="Import Test Suite"]'); my $suite = $doc->getDocumentElement; $suite->removeChildNodes; $suite->addChild($_) for @tests; print $doc->serialize(1); # or $doc->toFile("new.xml")

        Superb.. :)

        Let me make a try and i'll get back to you :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1052615]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (16)
As of 2015-07-06 20:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (83 votes), past polls