我正在尝试对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
答案 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