在Perl中删除具有属性的XML节点

在Perl中删除具有属性的XML节点,xml,perl,Xml,Perl,我是Perl新手,我有很多XML文件,具有以下相同的结构: <reult> <test name="test1"> <meassage type="passed"> <description><![CDATA[ ===>> passed is here]]></description> </meassage> <c

我是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>
删除所有不相关的节点后,我将把结果保存为一个新的XML文件。 顺便问一下,您能告诉我如何使用with属性删除节点吗

也许这能帮到你?永远不要使用XML::Simple。尝试XML::Twig或XML:;OP确实说所有节点都没有使用fail、error和warning作为属性,但我怀疑它们是否是真的。
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_grep \
    --cond 'meassage[@name="error"]' \
    --cond 'meassage[@name="fail"]' \
    --cond 'meassage[@name="warning"]' \
    so50214597.xml