默認情況下,LibXML將呈現空標記爲<tag />
,但我需要讓它呈現爲<tag></tag>
。Perl/LibXML:在序列化時保持結束標記
有沒有我在文檔中遺漏的選項,還是我必須用正則表達式替換(或任何其他解決方案,你可能知道)tweek輸出?
我尋找的地方做一個更好的辦法:
$xml = $dom->serialize(0);
$xml =~ s/<([a-z]+)([^>]*?)\/>/<$1$2><\/$1>/gsi;
默認情況下,LibXML將呈現空標記爲<tag />
,但我需要讓它呈現爲<tag></tag>
。Perl/LibXML:在序列化時保持結束標記
有沒有我在文檔中遺漏的選項,還是我必須用正則表達式替換(或任何其他解決方案,你可能知道)tweek輸出?
我尋找的地方做一個更好的辦法:
$xml = $dom->serialize(0);
$xml =~ s/<([a-z]+)([^>]*?)\/>/<$1$2><\/$1>/gsi;
的libxml有formerly documented feature ,可能會被視爲棄用,因爲它不在最新版本的文檔中,但它仍然是in the test files,所以它可能工作。
所有序列化函數都理解標誌setTagCompression。如果此標誌設置爲1,空標記顯示爲<foo> </foo >而不是< 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>
在XML中,它們是等效的。爲什麼你的特殊需要?有些東西不是按照規則玩的。 – daxim 2011-05-27 12:28:36
我知道。我不會解釋爲什麼我需要這個。我只需要相信我。 – glmxndr 2011-05-27 12:35:02