You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为XML::LibXML生成的XML输出逐行添加换行与缩进?

问题描述

使用XML::LibXML生成XML文档时,默认toString()方法输出的所有子标签会拼接在同一行,仅在文档末尾手动添加换行符无法实现标签分层换行、缩进的格式化效果,目标输出为按标签层级换行、带对应缩进的易读XML格式。

原有测试代码:

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::LibXML内置了格式化输出的配置项,不需要手动拼接换行符。在输出前开启缩进配置、指定缩进字符串即可实现目标效果:

  • 调用setIndent(1)开启文档输出的自动缩进、换行逻辑
  • 调用setIndentString($str)自定义缩进使用的字符,传入4个空格即可匹配预期的缩进宽度

之前尝试在toString()结果后手动追加换行符无效,是因为该操作仅会在整个XML文档的末尾添加字符,无法控制各层级标签之间的排版逻辑,标签间的换行、缩进需要通过模块内置的序列化配置控制。

修改后的完整可运行代码:

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);
# 开启格式化输出配置
$doc->setIndent(1);
$doc->setIndentString("    ");
print $doc->toString();

运行上述代码即可得到符合预期的带换行、缩进的XML输出。

说明:如果需要更复杂的格式化规则(比如属性换行、空标签自定义样式等),可以搭配XML::LibXML::PrettyPrint模块实现更灵活的美化配置,常规场景下内置配置已足够使用。

内容的提问来源于stack exchange,提问作者Monica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:54:15