#!/usr/bin/perl use warnings; use strict; use XML::LibXML::Reader; my $reader = 'XML::LibXML::Reader'->new( location => shift ) or die "Can't open file.\n"; while ($reader->read) { if ('product' eq $reader->name) { my $dom = $reader->copyCurrentNode(1); print $dom->findvalue('product_id'), "\n"; for my $attr ($dom->findnodes('attributes/attribute')) { my $groups = $attr->findnodes('group'); for my $group (@$groups) { my $gid = $group->findnodes('id'); my $gname = $group->findnodes('name'); print "\tgroup [ $gid : $gname ]\n"; } my $values = $attr->findnodes('value'); for my $value (@$values) { my $vid = $value->findnodes('id'); my $vval = $value->findnodes('value'); print "\tvalue [ $vid : $vval ]\n"; } } } }