#!/usr/bin/perl
use warnings;
use strict;
use XML::XPath;
my $xml = qq{
<root attrib="hello world">
<lvl_one id="id_a">foo</lvl_one>
<lvl_one id="id_b">bar <lvl_two>two</lvl_two></lvl_one>
<lvl_one id="id_b">baz <lvl_two>TWO<lvl_three>THREE</lvl_three></lvl_two></lvl_one>
<xyz>Eggs, why and z</xyz>
</root>
};
my $xp = XML::XPath->new(xml => $xml);
printf "/root/\@attrib : %s\n", $xp->findvalue ('/root/@attrib' ); # hello world
printf "/root//lvl_three : %s\n" , $xp->getNodeText('//lvl_three' ); # THREE
my @lvl_one_nodes = $xp->findnodes('/root/lvl_one');
# @lvl_one_nodes is an array of XML::Path::Node::Element
print "\nIterating over elements of /root/lvl_one\n";
for my $lvl_one_node (@lvl_one_nodes) {
printf " lvl_one_node: %s\n", $lvl_one_node->toString();
}
print "\nSame thing, but without recursing\n";
for my $lvl_one_node (@lvl_one_nodes) {
printf " lvl_one_node: %s\n", $lvl_one_node->toString(1);
}
print "\nExtracting ids\n";
for my $lvl_one_node (@lvl_one_nodes) {
printf " \@id %s\n", $lvl_one_node->findvalue('@id');
}
#!/usr/bin/perl
use warnings;
use strict;
use XML::XPath;
my $xml = qq{
<root>
<abc id='foo'>Hello</abc>
<abc id='bar'>World</abc>
<abc id='baz'>42</abc>
</root>
};
my $xp = XML::XPath->new(xml => $xml);
my $val = $xp->getNodeText('/root/abc[@id="bar"]');
print "val = $val\n"; # val = World
#!/usr/bin/perl
use warnings;
use strict;
use XML::XPath;
my $xml = qq{
<root>
<abc id='foo' access='read' >Hello</abc>
<abc id='bar' access='read/write'>World</abc>
</root>
};
my $xp = XML::XPath->new(xml => $xml);
my $new_node = XML::XPath::Node::Element->new('abc');
my $node_text = XML::XPath::Node::Text->new('foo');
my $attr_id = XML::XPath::Node::Attribute->new('id');
my $attr_access = XML::XPath::Node::Attribute->new('access');
$attr_id -> setNodeValue('baz');
$attr_access -> setNodeValue('all');
$new_node->appendChild($node_text);
$new_node->appendAttribute($attr_id);
$new_node->appendAttribute($attr_access);
#
# findnodes returns a XML::XPath::NodeSet, but for the appendChild
# below, we're instersted in an XML::XPath::Node:Element.
# Therefore, the $root is enclosed in paranthesis:
#
my ($root) = $xp->findnodes('/root');
$root->appendChild($new_node);
print $xp->findnodes_as_string('/');