Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

XPATH and perl

by yorozen (Initiate)
on Aug 15, 2009 at 21:34 UTC ( [id://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:
/Provisioning/ComponentParameters/MaFieldsLogic/Parameter10/Value/Item
i want to get the following value ems.mydomain.com 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='ems.mydomain.com'/> </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
    Try
    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?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://788934]
Approved by zwon
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (8)
As of 2024-03-28 09:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found