http://www.perlmonks.org?node_id=1012905


in reply to Perl XML Search

use 5.012; use strict; use warnings; use Ask qw(:all); use XML::LibXML 2; my $xml = XML::LibXML->load_xml(IO => \*DATA); my $who = entry("Who are you looking for?"); my ($person) = $xml->findnodes(qq{//person[name/text() = "$who"]}) or error("Cannot find '$who'\n") and die; my @lines = $person->findnodes(qq{adr/*})->map(sub { $_->textContent } +); info(join "; ", @lines); __DATA__ <contacts> <person> <name>Barack Obama</name> <adr> <street-address>1600 Pennsylvania Avenue Northwest</street +-address> <locality>Washington</locality> <region>DC</region> <postal-code>20500</postal-code> <country>United States</country> </adr> </person> <person> <name>David Cameron</name> <adr> <street-address>10 Downing Street</street-address> <locality>London</locality> <postal-code>SW1A 2AA</postal-code> <country>United Kingdom</country> </adr> </person> </contacts>
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'