尝试在XML :: LibXML中对XML片段进行封装时出错

时间:2012-02-15 15:21:41

标签: perl libxml2 canonicalization xml-libxml

我正在尝试对XML片段进行封装,以避免在生成的XML中打印自闭节点。 (我希望节点<test />由于消费系统的限制而流式传输为<test></test>

我尝试在XML :: LibXML :: Node中使用toStringC14N()方法来实现相同但我点击了以下错误,我似乎也没有得到谷歌的任何帮助。

use XML::LibXML;

my $tagName  = 'testtag';
my $tagValue = '';

my $doc = XML::LibXML->createDocument->new('1.0', 'UTF-8');
my $element = $doc->createElement($tagName);
$element->appendText($tagValue);
print "\nOut=>".$element->toStringC14N();

输出:

Failed to convert doc to string in doc->toStringC14N at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/XML/LibXML.pm line 1328.

我只能追查错误,直到LibXML.c中的以下方法

xmlDocDumpMemory(self, &result, &len);

我对我的错误一无所知,因为“toString()”似乎工作正常。

我正在使用perl v5.8.8&amp; XML :: LibXML版本1.88

1 个答案:

答案 0 :(得分:1)

XML :: LibXML的测试脚本t / 24c14n.t中的所有单元测试从$ parser-&gt; parse_string获取$ doc并在其上调用toStringC14N。也许有一些关于createDocument的东西在toStringC14N方面不是圆形的。您可以尝试询问XML :: LibXML邮件列表(见下文)。

同时,这确实有效:

my $doc = XML::LibXML->createDocument->new('1.0', 'UTF-8');

my $element = $doc->createElement($tagName);
$element->appendText($tagValue);
my $doc2 = XML::LibXML->new->parse_string($element->toString);
print "\nOut=>".$doc2->toStringC14N()."\n";

#prints Out=><testtag></testtag>
  

有关建议等,以及与XML :: LibXML相关的其他问题,您可以   使用perl XML邮件列表(perl-xml@listserv.ActiveState.com),   讨论了大多数与XML相关的Perl模块。遇到问题   你应该先检查一下这个清单的档案。很多问题都存在   已在那里讨论过。你可以找到列表的档案和   订阅选项   http://aspn.activestate.com/ASPN/Mail/Browse/Threaded/perl-xml