Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Re^2: XML::LibXML and namespaces

by Anonymous Monk
on Nov 11, 2012 at 13:33 UTC ( #1003330=note: print w/ replies, xml ) Need Help??

in reply to Re: XML::LibXML and namespaces
in thread XML::LibXML and namespaces

Wouldn't you know it :) xpath allows ignoring namespaces by using functions name and local-name, and the current node (.) comes in handy , heady even

#!/usr/bin/perl -- use strict; use warnings; use XML::LibXML; my $doc = XML::LibXML->new()->parse_string( q{<?xml version='1.0' ?> <roshambo xmlns=""> <sham> <bo name="40" /> <bo name="2" /> </sham> <sham xmlns:ftt=""> <ftt:bo name="forty" /> <ftt:bo name="two" /> </sham> </roshambo> } ); for my $name ( $doc->findnodes( q{//*[local-name()="bo"]/@name} ) ) { printf "%-25s %s\n", $name->nodePath, $name->nodeValue; } print "\n\n"; for my $node ( $doc->findnodes( q{//*[name()="sham"]} ) ) { print "@{[ $node->nodePath ]}\n"; ## any children ## ./* ## any descendants ## .//* ## anywhere ## //* for my $name ( $node->findnodes( q{./*[local-name()="bo"]/@name} ) + ) { printf "%-25s %s\n", $name->nodePath, $name->nodeValue; } print "\n\n"; } __END__ /*/*[1]/*[1]/@name 40 /*/*[1]/*[2]/@name 2 /*/*[2]/ftt:bo[1]/@name forty /*/*[2]/ftt:bo[2]/@name two /*/*[1] /*/*[1]/*[1]/@name 40 /*/*[1]/*[2]/@name 2 /*/*[2] /*/*[2]/ftt:bo[1]/@name forty /*/*[2]/ftt:bo[2]/@name two

Comment on Re^2: XML::LibXML and namespaces
Download Code
Re^3: XML::LibXML and namespaces
by Anonymous Monk on Aug 19, 2014 at 13:20 UTC
    Awesome! Exactly what I needed.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1003330]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2014-09-17 01:58 GMT
Find Nodes?
    Voting Booth?

    How do you remember the number of days in each month?

    Results (56 votes), past polls