gpt4 book ai didi

xml - 使用 Perl 和 XML::Twig 解析 XML - 进一步提取嵌套子项

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:37 25 4
gpt4 key购买 nike

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

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

我目前正在使用 XML::Twig 来操作其他一切,我想继续使用这个模块来实现我的目标,即:

从 C2A 和 C2B 中提取数据,并将它们分配给变量。请注意,C2A 和 C2B 可能有多个条目,例如需要将它们连接成一个@array。但是,我的问题是向下导航树,例如,如果我们按照我发现的另一个示例进行操作,那么对于这些​​数据来说这就足够了:

<MOVIE_LIST>
<MOVIE>
<NAME>Name of the Movie</NAME>
<MOVIE_ID>28372382</MOVIE_ID>
<DESCRIPTIONS>
<LONG_DESCRIPTION>This is a long description</LONG_DESCRIPTION>
<SHORT_DESCRIPTION>short description</SHORT_DESCRIPTION>
</DESCRIPTIONS>
<DIRECTOR_LIST>
<DIRECTOR>director 1</DIRECTOR>
<DIRECTOR>director 2</DIRECTOR>
</DIRECTOR_LIST>
</MOVIE>
<MOVIE>
...
</MOVIE>
</MOVIE_LIST>

解决方案是: @directors = $elt->first_child('DIRECTOR_LIST')->children_text('DIRECTOR');

但是,我的问题是,有时这些 child 并不存在(例如,根本没有发送剖腹产数据),这让我感到无休止的悲伤,因为像下面这样的事情是行不通的:

@C = $elt->first_child('C')->first_child('C1')->children_text('C2');

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

最佳答案

如果其中一个方法没有找到 child ,那么它将返回 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 - 使用 Perl 和 XML::Twig 解析 XML - 进一步提取嵌套子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com