【问题标题】:remove XML nodes with attribute in Perl在 Perl 中删除具有属性的 XML 节点
【发布时间】: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 删除节点?

【问题讨论】:

标签: xml perl


【解决方案1】:

http://p3rl.org/xml_grep

xml_grep \
    --cond 'meassage[@name="error"]' \
    --cond 'meassage[@name="fail"]' \
    --cond 'meassage[@name="warning"]' \
    so50214597.xml

【讨论】:

  • OP 确实说“所有节点都没有“失败”、“错误”、 “警告”作为属性”,但我怀疑他们是否是认真的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2023-03-23
相关资源
最近更新 更多