xml - 如何使用基于标签的 XML::Twig 解析器在 Unix 上清理 xml 文件
问题描述
我需要从不必要的信息(重复、过时等)中清理 XML 文件。我有具有不同命名标签的 XML 文件,但它们都具有相似的属性,我正在寻找一种解决方案,了解如何通过将参数传递给 Perl 解析器来从 XML 文件中删除一些标签。
一个示例 XML 结构是:
<Jobs>
<Job>
<JobID>ID1</JobID>
<DueDate>01-02-2008</DueDate>
</Job>
<Job>
<JobID>ID2</JobID>
<DueDate>01-02-2009</DueDate>
</Job>
<Job>
<JobID>ID3</JobID>
<DueDate>01-02-2010</DueDate>
</Job>
<Job>
<JobID>ID4</JobID>
<DueDate>01-02-2011</DueDate>
</Job>
<Job>
<JobID>ID5</JobID>
<DueDate>01-02-2012</DueDate>
</Job>
</Jobs>
现在假设我希望删除Job
包含JobID
文本标签的标签ID3
,我的 output.xml 文件将变为:
<Jobs>
<Job>
<JobID>ID1</JobID>
<DueDate>01-02-2008</DueDate>
</Job>
<Job>
<JobID>ID2</JobID>
<DueDate>01-02-2009</DueDate>
</Job>
<Job>
<JobID>ID4</JobID>
<DueDate>01-02-2011</DueDate>
</Job>
<Job>
<JobID>ID5</JobID>
<DueDate>01-02-2012</DueDate>
</Job>
</Jobs>
请帮助我编写一个代码,使用XML::Twig
它可以帮助使用 Perl根据此处提出的建议解决此任务
我需要在文件中的任何位置剪切标签并拉出它下面的所有其他标签并保存回文件(最好保存到同一个文件)。
我需要有一个 Perl 脚本并将参数传递给它,如下所示:
将两个参数传递给脚本:
- 必须删除的标签的名称,我们称之为
R_tag
- 嵌套在 R_tag 下的标签的名称,我们称之为
R_tag_nested
- 我们必须传递一个嵌套标签必须等于的值才能触发
R_tag
删除,在我们的例子中是ID3
我会使用这一行调用脚本
myscript.pl?R_tag&R_tag_nested=ID3
但与此同时,我希望足够灵活,以便通过发送多个嵌套标签参数(R_tag
与整个文档相同)一次性删除 2 个或多个标签,命令将是:
myscript.pl?R_tag&R_tag_nested=ID3&R_tag_nested=ID5
这会将这样的输出提供给 output.xml 文件:
<Jobs>
<Job>
<JobID>ID1</JobID>
<DueDate>01-02-2008</DueDate>
</Job>
<Job>
<JobID>ID2</JobID>
<DueDate>01-02-2009</DueDate>
</Job>
<Job>
<JobID>ID4</JobID>
<DueDate>01-02-2011</DueDate>
</Job>
</Jobs>
我还没有开始编写它,因为我没有太多使用 XML::Twig 剪切/粘贴/修剪 XML 的经验,并且需要帮助从头开始编写这个短代码。
解决方案
你还没有确定是什么给你带来了问题,所以我假设你在问如何解决这个问题。
当您想从列表中过滤掉项目时,散列很有用。构建以下哈希:
my %to_remove = (
"ID3" => 1,
"ID5" => 1,
);
然后,这只是一个遍历您可能想要删除的节点、获取它们的文本内容并删除那些满足以下条件的节点的问题:
$to_remove{$text_content}
推荐阅读
- c - 在测试中写入套接字文件描述符并使用 recv() 读取它们
- python - 如何在模块中模拟一个方法而不是模拟整个模块
- reactjs - 绘制证券交易所数据图的最佳实践
- python-3.x - 使用 ffpyplayer 和 Opencv 播放视频
- java - 在 AlarmManager 中保留设置的时间表/日期,但停止重复
- android - 代号 One Maven 无法发送 Android 版本
- c++ - BCB Journal 离线
- python - 如何在熊猫中制作这个条件列?
- java - 使用 bootJar 行为覆盖项目的 jar 任务
- javascript - 'this' 关键字不起作用 在 Atom 中不起作用