I'm adding nodes to my XML document as part some in-house processing, but cannot get XML::LibXML
to auto-indent the added nodes.
I get output like the following:
Here's what I'm currently getting with $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>
What I would like to have is pretty-printed output:
<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>
The optional $format
parameter for the toString()
method documented in XML::LibXML::Document
doesn't seem to help.
I played a bit with settings and this seems to work:
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);
Result is this:
<?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>
If you don't mind using another tool, I recommend XML::Tidy. It does one job, and it does it well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With