我需要编写一个perl脚本来通过XML文件进行解析。如果SpecialData标签具有值,那么我需要打印名称。我可以写这个 用于以下文件。
对于以下xml文件,输出应为Name-abc
<Data>
<Name>abc</Name>
<SpecialData>Properties</SpecialData>
</Data>
<Data>
<Name>mnp</Name>
</Data>
但是在如下所述的xml文件中,SpecialData标记具有空标记属性。如果存在SpecialData标签,我需要编写一个Perl脚本来打印名称。这里的区别是,Properties是一个内部标签,而不是第一个问题的值。谁能帮我写一个Perl脚本来做到这一点?
对于以下xml文件,输出应为Name- abc
<Data>
<Name>abc</Name>
<SpecialData>
<Properties />
</SpecialData>
</Data>
<Data>
<Name>mnp</Name>
</Data>
答案 0 :(得分:2)
[您发布的内容不是有效的XML文件。我假设您发布的内容是XML文件的摘要。具体来说,我假设它们是在名为root
的根元素下找到的。]
使用XML :: LibXML之类的基于DOM的解析器,它看起来如下所示:
for my $data_node ($doc->findnodes('/root/Data')) {
if ($data_node->findnodes('SpecialData')) {
say $data_node->findvalue('Name');
}
}
如果您不需要其他数据节点的任何内容,甚至可以使用以下内容:
for my $data_node ($doc->findnodes('/root/Data[SpecialData]')) {
say $data_node->findvalue('Name');
}
如果您不需要数据节点中的其他任何内容,甚至可以使用以下内容:
say for $doc->findnodes('/root/Data[SpecialData]/Name/text()');