2012-02-15 79 views
0

我試圖規範XML片段以避免在生成的XML中打印自閉合節點。 (我想節點<test />由於在消費系統的限制,流爲<test></test>)。嘗試在XML中標記XML片段時出錯:: LibXML

我試圖用toStringC14N()方法在XML ::的libxml ::節點來實現相同的,但我打下面的錯誤上,我不似乎得到來自谷歌的任何有幫助。

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 & XML ::的libxml版本1.88

回答

1

在XML ::的libxml的測試腳本萬噸/年的所有單元測試24c14n.t得到$ parser-> parse_string和調用$ DOC toStringC14N。也許有一些關於toStringC14N的createDocument是不可循環的。你可以嘗試在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郵件列表([email protected] .com), 這裏討論了大多數與XML相關的Perl模塊。如果出現問題 您應該首先檢查該列表的存檔。那裏已經討論了許多問題 。您可以在 http://aspn.activestate.com/ASPN/Mail/Browse/Threaded/perl-xml找到列表的檔案和 訂閱選項。