用Perl解析XML&;Twig-进一步提取嵌套子级

用Perl解析XML&;Twig-进一步提取嵌套子级,xml,perl,xml-twig,Xml,Perl,Xml Twig,目前正在尝试找出如何最好地处理以下示例XML数据: <FOO> <A>1</A> <B>Some Stuff</B> <C> <C1> <C2A><![CDATA[xxx]]></C2A> <C2B><![CDATA[yyy]]></C2B> </C1>

目前正在尝试找出如何最好地处理以下示例XML数据:

<FOO>
    <A>1</A>
    <B>Some Stuff</B>
    <C>
      <C1>
        <C2A><![CDATA[xxx]]></C2A>
        <C2B><![CDATA[yyy]]></C2B>
      </C1>
    </C>
</FOO>

我对如何实现我的目标感到相当困惑,我非常感激任何建议,欢迎简单的回答;-)

如果其中一个方法找不到子方法,那么它将返回undef,您当然不能对其调用方法

因此,您只有两个选择:

您可以测试链接表达式的每个步骤:

@C =    $elt->first_child('C') 
     && $elt->first_child('C')->first_child('C1')
     && $elt->first_child('C')->first_child('C1')->children_text('C2')
     || ()
    ;
或者使用XPath:

@C= map { $_->text } $elt->findnodes( './C/C1/C2');

第二个选项可能更易于阅读和维护。

首先感谢您的回复,其次感谢XML::Twig!两人都非常感激:-)没问题。我希望能够简单地祝福
undf
BTW,它有时会大大简化代码。
@C =    $elt->first_child('C') 
     && $elt->first_child('C')->first_child('C1')
     && $elt->first_child('C')->first_child('C1')->children_text('C2')
     || ()
    ;
@C= map { $_->text } $elt->findnodes( './C/C1/C2');