【问题标题】:How do I write the XML back using XML::Parser in perl?如何在 perl 中使用 XML::Parser 写回 XML?
【发布时间】:2019-11-07 09:10:15
【问题描述】:

我需要修改一个 XML 文档并将其转储回去。我可以使用 perl 中的 XML::Parser 来执行此操作,但是我找不到将其转储回来的方法。找不到太多关于写回来的东西..

愚蠢的实现之一

use warnings;
use strict;
use XML::Parser;
use Data::Dumper;

sub char_handler
{
        my ($parser, $text) = @_;
        $text = #DO SOMETHING HERE WITH THE TEXT
}

my ($file) = @ARGV;
open(FILE,$file);
$xml=<FILE>;
my $parser = new XML::Parser( Style=>"Tree",
                              Handler => {
                              Char => \&char_handler
                });
my $doc = $parser->parse($xml);

print Data::Dumper->Dump([$doc]);

dumps the XML. 

【问题讨论】:

  • 由于环境的限制,目前无法使用 Twig,并希望使其保持简单。 XML::Simple 可能是......但我对 XML::Simple 也有同样的问题。
  • XML::LibXML 呢?
  • Mojo::DOMMojo::DOM58 是更多选项。 Don't use XML::Simple.
  • 我不认为你可以使用处理函数来修改被解析的文档。
  • @Shawn 你说得对,我只是将 xml 转储回去,它与 XML::Parser 的任何其他替代方案相同,还是 twig 或其他?

标签: xml perl xml-parsing


【解决方案1】:

XML::Parser 只是一个解析器,它并不真正用于修改文档并将其保存为 XML。对于这种类型的应用程序,您需要具有某种类型的 DOM(文档对象模型)的模块,该模块可以保留有关文档的足够信息并能够序列化回 XML。

我使用并推荐 XML::LibXML 并编写了 a tutorial,您可能会觉得有用。

这绝不是唯一的选择,但它确实可靠。它也比 XML::Simple 更简单、更一致(我知道的足够多,不要使用它)。

【讨论】:

  • Simple 修改了 XML 结构,它使解析器感到困惑。我会同意的。你的教程写得很好,但也很详尽:) 一旦我有更多时间,我会更深入地阅读它
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多