Hi Monks, I'm trying to print all of the matching XML node info if the value (6444) for one of the attributes is found. I've tried using XML Simple, Twig and even attempted to write my own, all without any success. The furthest I've managed to get is the following. XML file;
<root> <ProductKey>99</ProductKey> <Test size = "50"> <Job tags = "boo baa"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063 +</Volume> <Volume VolumeCategory="cuft" MeasurementCategory="Real">2. +2</Volume> <Volume VolumeCategory="6444" MeasurementCategory="Deal">2. +2</Volume> </Job> </Test> <Test size = "100"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="6444" MeasurementCategory="Real">2.2</ +Volume> </Test> <Test> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="5555" MeasurementCategory="Real">2.2</ +Volume> </Test> </root>
SCRIPT;
use strict; use XML::LibXML; my $parser = XML::LibXML->new; my $doc = $parser->parse_file("minimal.xml"); my @vol = $doc->findnodes(q {/descendant::Volume[@VolumeCategory="6444 +"]}); foreach my $element (@vol) { print $element->parentNode->nodeName; print $element->parentNode(), $element->nodeValue(), "\n"; }
OUTPUT;
Job<Job tags="boo baa"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063 +</Volume> <Volume VolumeCategory="cuft" MeasurementCategory="Real">2. +2</Volume> <Volume VolumeCategory="6444" MeasurementCategory="Deal">2. +2</Volume> </Job> Test<Test size="100"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="6444" MeasurementCategory="Real">2.2</ +Volume> </Test>
DESIRED OUTPUT;
<Test size = "50"> Job<Job tags="boo baa"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063 +</Volume> <Volume VolumeCategory="cuft" MeasurementCategory="Real">2. +2</Volume> <Volume VolumeCategory="6444" MeasurementCategory="Deal">2. +2</Volume> </Job> </Test> Test<Test size="100"> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="L" MeasurementCategory="Real">0.063</V +olume> <Volume VolumeCategory="6444" MeasurementCategory="Real">2.2</ +Volume> </Test>
Where, for the first match I also print the parent of <job> which is <test>. Any ideas? Your help is greatly appreciated!!! Thanks, MM
In reply to LibXML findnode and parents by chrometeddy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |