用Perl解析XML&;Twig-进一步提取嵌套子级
目前正在尝试找出如何最好地处理以下示例XML数据:用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>
<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');