如何使用XML::LibXML自动缩进XML节点?

6
作为内部处理的一部分,我正在向XML文档添加节点,但无法让XML::LibXML自动缩进所添加的节点。
我得到以下输出:
这是我目前使用$xml->toString( 1 )得到的结果:
                                    <nested_nodes>
                                        <nested_node>
                                        <configuration>A</configuration>
                                        <model>45</model>
                                        <added_node>
        <ID>
            <type>D</type>
            <serial>3</serial>
            <kVal>3</kVal>
        </ID>
    </added_node>
</nested_node>
                                    </nested_nodes>

我希望得到漂亮的输出格式:
                            <nested_nodes>
                                <nested_node>
                                    <configuration>A</configuration>
                                    <model>45</model>
                                    <added_node>
                                        <ID>
                                            <type>D</type>
                                            <serial>3</serial>
                                            <kVal>3</kVal>
                                        </ID>
                                    </added_node>
                                </nested_node>
                            </nested_nodes>

< p > toString() 方法的可选参数 $formatXML::LibXML::Document 中的文档中似乎没有什么帮助。

2个回答

7

我尝试了一下设置,这个方法似乎可行:

use XML::LibXML;

my $doc = XML::LibXML->load_xml(string => <<END_XML, { no_blanks => 1 });
                                    <nested_nodes>
                                        <nested_node>
                                        <configuration>A</configuration>
                                        <model>45</model>
                                        <added_node>
        <ID>
            <type>D</type>
            <serial>3</serial>
            <kVal>3</kVal>
        </ID>
    </added_node>
</nested_node>
                                    </nested_nodes>
END_XML

print $doc->toString(1);

结果如下:
<?xml version="1.0"?>
<nested_nodes>
  <nested_node>
    <configuration>A</configuration>
    <model>45</model>
    <added_node>
      <ID>
        <type>D</type>
        <serial>3</serial>
        <kVal>3</kVal>
      </ID>
    </added_node>
  </nested_node>
</nested_nodes>

1
太棒了!关键是在嵌套节点和添加的节点中都加入了 no_blanks 选项。做得好,@bvr! - Zaid
非常感谢!作为参考,这也适用于使用位置=> $filename,{no_blanks => 1}的表单文件。 - JLZenor

1

如果你不介意使用另一个工具,我推荐XML::Tidy。它只做一件事情,但却做得很好。


我不得不遗憾地坚持使用 XML::LibXML - Zaid
它在目标平台上不可用,我也不想在我的脚本中包含XML::Tidy的源代码。 - Zaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接