Perl / LibXML:序列化时保持关闭标签

问题描述

| 认情况下,LibXML将空标记呈现为
<tag />
,但是我需要将其呈现为
<tag></tag>
。 是我在文档中错过的一个选项,还是我必须用regexp替换(或您可能知道的任何其他解决方案)来对输出进行调整? 我正在寻找一种更好的方法来代替:
$xml = $dom->serialize(0);
$xml =~ s/<([a-z]+)([^>]*?)\\/>/<$1$2><\\/$1>/gsi;
    

解决方法

        LibXML具有以前记录的功能,由于它不在最新版本的文档中,因此可能被认为已弃用,但仍在测试文件中,因此它可能起作用。   所有序列化功能都了解标志setTagCompression。如果此标志设置为1,则空标记显示为 而不是
my $xml = do {
    local $XML::LibXML::setTagCompression = 1;
    $doc->toString();
};
    ,        怎么样:
use XML::LibXML;

my $x = XML::LibXML->new();
my $d = $x->load_xml(string => \"<xml><foo/></xml>\");

print $d->toString;

print qq{<?xml version=\"1.0\"?>\\n} . $d->toStringHTML();\'
产量:
<?xml version=\"1.0\"?>
<xml><foo/></xml>

<?xml version=\"1.0\"?>
<xml><foo></foo></xml>