use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML->load_xml(IO => \*DATA);
for my $role ($xml->findnodes('//@role')) {
print $role->value;
}
__DATA__
<?xml version='1.0'?>
<employee>
<name>Smith</name>
<age>43</age>
<sex>M</sex>
<department role='manager'>Operations</department>
</employee>
Above code returns "Role = Manager". How to get other values? For an example Name.age,sex and department.
EDITED
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML->load_xml(IO => \*DATA);
for my $employee ($xml->findnodes('//Copy')) {
print "Name: ", $employee->findvalue('//body'), "\n";
print " Role: ", $employee->findvalue('CopyElement/@CopyElementType'), "\n";
}
__DATA__
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<CopyContent AgentName="" AgentVersion="" noNamespaceSchemaLocation="" xmlns1="">
<RevisionHistory RevisionNumber="">
<Revision Author="tester" RevisionNumber="01" TimeStamp="2014052103:51:04" Type=""/>
</RevisionHistory>
<Project ProjectID="112233" ProjectName="" Region="">
<POAs>
<POA ID="" Locales="" Name=""/>
</POAs>
</Project>
<Copy>
<CopyElement CopyElementType="template_name" CopySourceRef="" ID="" LinkedState="NotLinkedToArtwork" Locale="" POAs="" Panels="" SourceRef="">
<body>
<countrycode/>
<p>auto-template1</p>
</body>
</CopyElement>
<GraphicElement DescriptiveName="legendimages" ID="0001" Type="link" ref=" file:////Volumes/Schawk Asia/Asia ProdArt/297620A/090 Deliverables/Legend/97005846_D_Legend_Legend.pdf"/>
<GraphicElement DescriptiveName="pallet_pattern" ID="0001" Type="link" ref=" file:////Volumes/Tornado Shipper Library/P&G/Pantene/Asia/T03 Pallet Pattern/PAL_23x3x69_P&G 1329_100_V0001.pdf"/>
<CopyElement CopyElementType="WorkerName" CopySourceRef=" A6" ID="" LinkedState="NotLinkedToArtwork" Locale="English" POAs="" Panels="" SourceRef=" Brand Name">
<body>
<countrycode/> <p>Alan Smith</p>
</body>
</CopyElement>
<CopyElement CopyElementType="EmpName" CopySourceRef=" A6" ID="" LinkedState="NotLinkedToArtwork" Locale="English" POAs="" Panels="" SourceRef=" Brand Name">
<body>
<countrycode/> <p>Brendan Froesr</p>
</body>
</CopyElement>
</Copy>
<Private/>
</CopyContent>
Output

XML::LibXML//bodyis short for/descendant:body, which means allbodyelements under root. You wantchild:body, orbodyfor short.