如何为每个XML输出添加换行符?



我试图在XML::LibXML的XML输出中为每个<>行添加换行符从https://stackoverflow.com/a/2934794/19508169 .

use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML::Document->new('1.0', 'utf-8');
my $root = $doc->createElement('my-root-element');
$root->setAttribute('some-attr'=> 'some-value');
my %elements = (
color => 'blue',
metal => 'steel',
);
for my $name (keys %elements) {
my $tag = $doc->createElement($name);
my $value = $elements{$name};
$tag->appendTextNode($value);
$root->appendChild($tag);
}
$doc->setDocumentElement($root);
print $doc->toString();

但是,当我尝试这个代码时,我得到了没有换行符的结果:

%> perl test2.pl
<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value"><color>blue</color><metal>steel</metal></my-root-element>

我期望如下:

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
<color>blue</color>
<metal>steel</metal>
</my-root-element>

如何为每个XML输出添加换行符?

如果将" n"加入print $doc->toString();作为print $doc->toString(), " n";,则不起作用。

$doc->toString(1)代替$doc->toString()

可以说,找到正确的文档并不容易,因为XML::LibXML的页只包含指向其他页面的链接。您仍然可以执行print ref $doc,它输出XML::LibXML::Document:现在您知道需要查看XML::LibXML::Document的文档。在这里,您将找到toString:

的文档。

$docstring = $dom->toString($format);

[…]

如果$format为1,libxml2将添加可忽略的空白,因此节点的内容更容易阅读。

[…]

toString()方法(在XML::LibXML::Document中记录)有一个可选的数字参数,用于更改输出的格式。

toString

$docstring = $dom->toString($format);

toString是DOM序列化函数,因此DOM树被序列化为XML字符串,准备输出。

重要:与其他节点的toString不同,在文档节点上this函数将XML作为原始编码的字节字符串返回文档(参见actualEncoding()方法)!这意味着你可以只是做:

open my $out_fh, '>', $file;
print {$out_fh} $doc->toString;

,而不考虑文档的实际编码。请参阅在XML::LibXML中进行编码。

可选参数$format设置输出的缩进。这参数应该是一个整数值,它指定应该使用缩进。format参数可以有三个

如果$format为0,则文档按原始格式转储解析

如果$format为1,libxml2将添加可忽略的空白,因此节点内容更容易阅读。现有的文本节点将不会被修改

如果$format为2(或更大),libxml2将作为$format == 1,但它将作为$format == 1为每个文本节点添加一个前后换行符

libxml2使用硬编码缩进,每个缩进2个空格字符缩进级别。此值不能在运行时更改。

值"1"给出你想要的结果。

print $doc->toString(1);

输出:

<?xml version="1.0" encoding="utf-8"?>
<my-root-element some-attr="some-value">
<metal>steel</metal>
<color>blue</color>
</my-root-element>

最新更新