【发布时间】:2021-01-08 12:57:09
【问题描述】:
我需要从不必要的信息(重复、过时等)中清理 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>
现在假设我希望删除包含 JobID 标记和文本 ID3 的 Job 标记,我的 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 Based on suggestion made here 解决此任务
我需要在文件中的任何位置剪切标签并拉出它下面的所有其他标签并保存回文件(最好是同一个文件)。
我需要一个 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 的经验,并且需要帮助从头开始编写这个短代码。
【问题讨论】:
标签: xml perl unix xml-parsing