问题描述
|
默认情况下,LibXML将空标记呈现为
<tag />
,但是我需要将其呈现为<tag></tag>
。
是我在文档中错过的一个选项,还是我必须用regexp替换(或您可能知道的任何其他解决方案)来对输出进行调整?
我正在寻找一种更好的方法来代替:
$xml = $dom->serialize(0);
$xml =~ s/<([a-z]+)([^>]*?)\\/>/<$1$2><\\/$1>/gsi;
解决方法
LibXML具有以前记录的功能,由于它不在最新版本的文档中,因此可能被认为已弃用,但仍在测试文件中,因此它可能起作用。
所有序列化功能都了解标志setTagCompression。如果此标志设置为1,则空标记显示为 foo>而不是 。
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>