【发布时间】:2018-05-07 12:45:51
【问题描述】:
我是 Perl 新手,我有很多 XML 文件具有相同的以下结构:
<reult>
<test name="test1">
<meassage type="passed">
<description><![CDATA[ ===>> passed is here]]></description>
</meassage>
<check name="" line="150">
<result type="text"></result>
<description type="DETAILED"></description>
</check>
<meassage type="error">
<description><![CDATA[ ===>> error is here]]></description>
</meassage>
<meassage type="passed">
<description><![CDATA[ ===>> passed is here]]></description>
</meassage>
</test>
<test name="test2">
<meassage type="warning">
<description><![CDATA[ ===>> warning is here]]></description>
</meassage>
<meassage type="fail">
<description><![CDATA[ ===>> fail is here]]></description>
</meassage>
<meassage type="passed">
<description><![CDATA[ ===>> passed is here]]></description>
</meassage>
<check name="" line="100">
<result type="text"></result>
<description type="DETAILED"></description>
</check>
</test>
</reult>
我想要做的是使用for 阅读每个测试,然后删除每个与我无关的消息节点。也就是说,所有没有“fail”、“error”、“warning”属性的节点都必须被删除。
我开始使用消息删除 test 的所有子项,但它会删除应该保留的内容。这是仅用于删除的代码的主要部分,我无法弄清楚。
my $cut_name = 'message';
my $xml_file = 'test.xml';
my $mainXml = XML::Simple::Tree->new( file => $xml_file,
node_key => 'directory',
target_key => 'name');
$mainXml->cut_node($cut_name);
删除所有不相关的节点后,我会将结果保存为新的XML 文件。
顺便问一下,请告诉我如何使用带有属性的splice 删除节点?
【问题讨论】:
-
也许这对你有帮助? stackoverflow.com/questions/29040585/…
-
永远不要使用
XML::Simple。请改用XML::Twig或XML:;LibXML。