Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

XPATH and perl

by yorozen (Initiate)
on Aug 15, 2009 at 21:34 UTC ( #788934=perlquestion: print w/replies, xml ) Need Help??
yorozen has asked for the wisdom of the Perl Monks concerning the following question:

Hi ,
I am a begginer with perl, and i'd like to know how i get a value from a xml file.
according to xmpspy the path is:
i want to get the following value and print it:
<Parameter> <Name>MADefaultAddressDomain</Name> <Description>Determines the email operator mail account do +main (address suffix).</Description> <Type>String</Type> <Restriction> <RequiresRestart>false</RequiresRestart> <Internal>false</Internal> <MinVal/> <MaxVal/> <MaxLength>256</MaxLength> <Mandatory>true</Mandatory> <Lov/> </Restriction> <Value> <Item Value=''/> </Value> </Parameter>

Replies are listed 'Best First'.
Re: XPATH and perl
by jbt (Chaplain) on Aug 15, 2009 at 22:34 UTC
    One way to do it:

    use XML::DOM::XPath; my $parser= XML::DOM::Parser->new(); my $doc = $parser->parsefile ("file.xml"); my @nodes = $doc->findnodes( '/Parameter/Value/Item' ); foreach (@nodes) { print $_->getAttribute( 'Value') . "\n"; }
Re: XPATH and perl
by ramrod (Curate) on Aug 16, 2009 at 03:03 UTC
    You can access your desired information several ways using XPath. For example:
    /Parameter/Value/Item /Parameter/Value/Item[@Value] //Item
    These all can get you to the node you desire.
    I assume from your Xpath that this is a snippet of the acutal XML file your are parsing. If you want just one of these values, you would want something like the XPath you mention in your post. But if you wanted all the Values in your XML, use the 3rd one I listed.
    Check out W3 Schools XPath for more information on XPath.

    One of the reasons I prefer XML::LibXML is the XPath support
    use XML::LibXML; #Parse XML my $template = 'xmldocument.xml'; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($template); #Find desired node(s) my @nodes= $doc->findnodes("//Item"); #Print results for(@nodes) { if($_->hasAttribute("Value") { my $data = $_->getAttributes("Value"); print "$data\n"; } }
    Update:Fixed typo

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://788934]
Approved by zwon
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (6)
As of 2017-10-18 10:30 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (244 votes). Check out past polls.