Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

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.

Replies are listed 'Best First'.
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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1016325]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (10)
As of 2017-02-23 08:38 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (341 votes). Check out past polls.