xml - 在 Perl 中删除具有属性的 XML 节点
问题描述
我是 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
,然后删除每个与我无关的消息节点。这意味着必须删除所有不具有“失败”、“错误”和“警告”属性的节点。
我开始使用消息删除所有测试子项,但它会删除应该保留的内容。这是仅用于删除的代码的主要部分,我无法弄清楚。
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
文件。顺便问一下,您能告诉我如何使用带有属性的拼接删除节点吗?
解决方案
xml_grep \
--cond 'meassage[@name="error"]' \
--cond 'meassage[@name="fail"]' \
--cond 'meassage[@name="warning"]' \
so50214597.xml
推荐阅读
- python - 来自 Plotly Contour 的 x 轴标签在 python 环境中做了奇怪的事情,但在 Anaconda 中没有
- c - Windows 终端颜色和 ANSI 终端颜色[C/C++]
- c# - C# 虚拟属性未按预期工作
- javascript - 获取插入了 javascript 属性的 url,但 UTF-8 字符不断出现在控制台中导致 404
- sql - 在视图中插入默认值而不在 SQL 中创建表
- python - 如何通过 Pyppeteer 获取搜索结果 URL?
- javascript - 如何将参数从脚本传递到 html 表单值
- python-3.x - 我可以在列表理解中展平包含字典和字典列表的列表吗?
- html - 如何在Vue js中动态更改卡中的图像?
- django - 我们可以在单个 Django 表单字段中同时使用自定义验证(使用 clean())和内置验证器吗?如果/如果-不是如何/为什么?