jfroebe has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I know it is just something I'm missing... something simple.

<CONFIG_PARM NAME="default network packet size"> <SETTING>512</SETTING> <TYPE>MIN</TYPE> <LINK_CONFIG NAME="max network packet size"> <RELATIONSHIP>LESS OR EQUAL</RELATIONSHIP> </LINK_CONFIG> </CONFIG_PARM>

The LINK_CONFIG is being retrieved with a hash reference $LINK_CONFIG_ref = $elt->first_child('LINK_CONFIG')->atts but am having trouble retrieving RELATIONSHIP. Is there a way to easily retrieve it without using a subtree?

Thanks

Jason

update (thanks mirod!): I was making it too difficult for myself.. here is the solution for this simple problem:

$RELATIONSHIP = $elt->first_child('LINK_CONFIG')->text if ( defined($elt->first_child('LINK_CONFIG')) );

Produces:

Linked to Config 'max online engines' EQUAL BUT POWER OF 2

No one has seen what you have seen, and until that happens, we're all going to think that you're nuts. - Jack O'Neil, Stargate SG-1

Replies are listed 'Best First'.
Re: XML::Twig and subchildren
by mirod (Canon) on Aug 10, 2004 at 20:40 UTC

    Did you try $elt->first_child('LINK_CONFIG')->first_child( 'RELATIONSHIP')? This would give you the element, you can get the content by applying text to it.

      Unfortunately, $elt->first_child() doesn't return an element object... so my $RELATIONSHIP = $elt->first_child('LINK_CONFIG')->first_child('RELATIONSHIP')->text; will fail on compilation with "Can't call method "first_child" on an undefined value".

      Jason

      No one has seen what you have seen, and until that happens, we're all going to think that you're nuts. - Jack O'Neil, Stargate SG-1

        $elt->first_child('LINK_CONFIG') returns an element, unless there is no LINK_CONFIG child. So if the code fails it will be at runtime, not compilation.

        If this is likely to happen then you have to process this case:

        if( my $link_config= $elt->first_child('LINK_CONFIG')) { my $relationship= $link_config->first_child('RELATIONSHIP')->text; + # ... } else { warn "no LINK_CONFIG found\n"; # or any other processing necessary }
Re: XML::Twig and subchildren
by GreyGlass (Sexton) on Aug 10, 2004 at 20:55 UTC
    It sounds like you are looking for $foo->text, but it is not 100% clear from the question.

    If this is not enough, please try to give a code sample, describe specifically what you are trying to accomplish and specifically what kind of difficulties you are encountering.