需要解析xml文件并通过检查空标签来打印元素

时间:2018-09-25 14:59:20

标签: xml perl xml-parsing

我需要编写一个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>

1 个答案:

答案 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()');