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

时间:2011-08-27 14:59:55

标签: xml perl xml-libxml

我在我的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>

XML::LibXML::Document中记录的$format方法的可选toString()参数似乎没有帮助。

2 个答案:

答案 0 :(得分:6)

我玩了一些设置,这似乎有效:

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 :(得分:1)

如果您不介意使用其他工具,我建议XML::Tidy。它完成了一项工作,而且做得很好。