如何在 perl 中使用 XML::P arser 将 XML 写回?

How do I write the XML back using XML::Parser in perl?

提问人:Addy 提问时间:6/25/2019 更新时间:6/26/2019 访问量:267

问:

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

愚蠢的实现之一

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. 
xml perl xml 解析

评论

0赞 Addy 6/25/2019
由于环境的限制,目前无法使用 Twig,并希望保持简单。XML::Simple 可能是...但我对XML::Simple也有同样的问题。
0赞 choroba 6/25/2019
那么XML::LibXML呢?
0赞 Grinnz 6/26/2019
Mojo::D OMMojo::D OM58 是更多选择。不要使用 XML::Simple
0赞 Shawn 6/26/2019
我认为您不能像那样使用处理程序函数来修改正在解析的文档。
0赞 Addy 6/26/2019
@Shawn你是对的,我只是把xml转储回来了,它与XML::P arser的任何其他替代方案是一样的,或者是twig或其他的?

答:

2赞 Grant McLean 6/26/2019 #1

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

我使用并推荐 XML::LibXML,并编写了一个您可能会觉得有用的教程

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

评论

0赞 Addy 6/28/2019
Simple 修改了 XML 结构,并且使解析器感到困惑。我同意这一点。你的教程写得很好,但也很详尽:)一旦我有更多时间,我会更深入地阅读它