Perl XML:DOM::Parser NoExpand仍在扩展实体



我正在使用XML::DOM::Parser库读取XML文件,进行一些小的调整,然后再次将其转储出去。文件中有一些编码的实体,我想以它们的编码形式保存它们。我尝试过为解析器使用NoExpand选项,但它似乎仍然可以扩展实体。以下是问题的一个最小示例:

use XML::DOM;
my $parser = new XML::DOM::Parser(NoExpand => 1);
my $doc = $parser->parse('<?xml version="1.0" encoding="UTF-8"?><MyTest Content="&#13;"/>');
print $doc->toString;

输出如下(注意实体已扩展):

<?xml version="1.0" encoding="UTF-8"?><MyTest Content="^M"/>

我使用的是带有XML::DOM 1.44和XML::Parser 2.41 的ActiveState Perl 5.16.3.1603

有没有什么方法可以让NoExpand不扩展我错过的内容?

这需要一些文档挖掘。正如您在XML::DOM::Parser:的文档中看到的那样

XML::Parser NoExpand选项或多或少支持

查看XML::Parser 的相关文档

如果未注册默认处理程序,则此操作无效,并且对属性值内部实体引用的扩展也没有影响。

因此,如果这个解析器中的这个特性对您有用,那么它对属性值就不起作用。如果它真的对你很重要:

  • 尝试其他XML解析器
  • 向XML::Parser的作者Enno Derksen提交一个bug或补丁

最新更新