默认情况下,LibXML会将空标记呈现为<tag />
,但我需要将它们呈现为<tag></tag>
。
我在文档中是否遗漏了一个选项,或者我是否需要使用regexp替换(或您可能知道的任何其他解决方案)来调整输出?
我正在寻找一种更好的方法来代替:
$xml = $dom->serialize(0);
$xml =~ s/<([a-z]+)([^>]*?)\/>/<$1$2><\/$1>/gsi;
答案 0 :(得分:3)
怎么样:
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>
答案 1 :(得分:3)
LibXML有一个formerly documented feature,可能会被视为已弃用,因为它不在最新版本的文档中,但它仍然是in the test files,因此可能会有效。
所有序列化函数都了解标志setTagCompression。如果此标记设置为1,则空标记显示为&lt; foo&gt;&lt; / foo&gt;而不是&lt; foo /&gt;。
my $xml = do {
local $XML::LibXML::setTagCompression = 1;
$doc->toString();
};