Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: XML Parsing

by tmharish (Friar)
on Jan 31, 2013 at 14:12 UTC ( #1016325=note: print w/ replies, xml ) Need Help??


in reply to Re^2: XML Parsing
in thread XML Parsing

Quite simply $hash_when_cat_eq_special is a pointer to a hash. So you can do your normal hash operations on it. The ->pointer() function returns this for you.

In terms of the foreach:

foreach my $elem ( @{ $xml_obj->{list}{value} } ) { $hash_of_subtree = $elem->pointer() ; }

The advantage here is that $xml_obj, $xml_obj->{list} ... are all Objects of type XML::Smart and can always be used as either a hash OR an array.

To extract your data you can simply use the 'pointer' function ( $xml_smart_obj->pointer() )that will return the hash structure or the 'content' function ( $xml_smart_obj->content() ) that will return the contents of a node.


Comment on Re^3: XML Parsing
Select or Download Code
Re^4: XML Parsing
by vmallya (Initiate) on Feb 08, 2013 at 14:14 UTC
    Harish, I see that when using content() to return contents of the node and that $xml_smart_obj was always returning one element, whereas the xml has multiple entries for the tag <parameter>. 1. How to list down all the pointers/contents for the tag <parameter> 2. Can I see the array size using $#xml_obj ? Thanks

      ->pointer will actually give you the tree starting from where you have traversed to in the xml_smart object. It will be a hash which you can use like an ordinary hash.

      You can traverse the object using the method described above and it will move the pointer.

      ___________node1 | root ---|-----------node2 |___________node3 ^ |________________Pointer could be here.

      Now when you ask for ->content() it will give you the content at node3 and if you ask for ->pointer it will give you the sub-tree starting from node3 in a hash.

      Hope that helps - Let me know if you need further clarification.

        Harish, Thanks for the clarification. One more doubt, say for node1, node2 i have defined an attribute, can i put a check something like if exists {node}(instance) ? Also how to access the value of attribute if it exists for each node. Regards Vishranth

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (12)
As of 2015-07-02 10:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (34 votes), past polls