Question

File: SN.xml

<?xml version="1.0"?>
<root>
    <category name="Cat1" id="C1">
        <subcat name="SCName1" sid="SC1">
            <prod pname='prod1' pid='p1'></prod>
            <prod pname='prod2' pid='p2'></prod>
            <prod pname='prod3' pid='p3'></prod>
        </subcat>
    </category>

</root>

I want below output:

<?xml version="1.0"?>
    <root>
        <category name="Cat1" id="C1">
            <subcat name="SCName1" sid="SC1">
                <prod pname='prod1' pid='p1'></prod>
                <prod pname='prod2' pid='p2'></prod>
                <prod pname='prod3' pid='p3'></prod>
              **<prod pname='prod4' pid='p4'></prod>**
            </subcat>
        </category>

    </root>

Please help me to get this ouptput using modules.

Thanks in advance.

Was it helpful?

Solution

Using XML::XSH2, a wrapper around XML::LibXML:

open SN.xml ;
$p := insert element prod append /root/category/subcat ;
set $p/@pname 'prod4' ;
set $p/@pid   'prod4' ;
save :b ;

OTHER TIPS

You may use XML::DOM to append value in subcat element.

#!/usr/bin/perl 

use strict;
use warnings;

use XML::DOM;
use File::Temp qw(tempfile);

my $str = <<F;
<?xml version="1.0"?>
<root>
    <category name="Cat1" id="C1">
        <subcat name="SCName1" sid="SC1">
            <prod pname='prod1' pid='p1'></prod>
            <prod pname='prod2' pid='p2'></prod>
            <prod pname='prod3' pid='p3'></prod>
        </subcat>
    </category>
</root>
F

my ($fh, $filename) = tempfile();
print $fh $str;
close $fh;

my $parser = XML::DOM::Parser->new;
my $doc = $parser->parsefile($filename);

unlink $filename;

my $subcat = $doc->getElementsByTagName('subcat')->item(0);
my $prod =  $doc->createElement('prod');
$prod->setAttribute(pname=>'prod4');
$prod->setAttribute(pid=>'p4');
$subcat->appendChild($prod);
print $doc->toString;

__END__

This gives output:

<?xml version="1.0"?>
<root>
    <category name="Cat1" id="C1">
        <subcat name="SCName1" sid="SC1">
            <prod pname="prod1" pid="p1"/>
            <prod pname="prod2" pid="p2"/>
            <prod pname="prod3" pid="p3"/>
        <prod pname="prod4" pid="p4"/></subcat>
    </category>
</root>

Note! As you may see there is a little problem with indentation and I don't know how to quickly fix it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top