object indent_xml(object parent, void|int indent_text, void|int level)
{
int subnodes = false;
foreach(parent->get_children();; object child)
{
if (child->get_node_type() == Parser.XML.Tree.XML_ELEMENT ||
(child->get_node_type() == Parser.XML.Tree.XML_TEXT && indent_text))
{
subnodes = true;
parent->add_child_before(Parser.XML.Tree.SimpleNode(Parser.XML.Tree.XML_TEXT, "", ([]), "\r\n"+" "*level), child);
indent_xml(child, indent_text, level+1);
}
}
if (subnodes && level)
parent->add_child(Parser.XML.Tree.SimpleNode(Parser.XML.Tree.XML_TEXT, "", ([]), "\r\n"+" "*(level-1)));
return parent;
}
indent_xml(make_xml_tree(input))->render_xml();
Result: "\r\n"
"\r\n"
" Some text here\r\n"
""
indent_xml(make_xml_tree(input), 1)->render_xml();
Result: "\r\n"
"\r\n"
" \r\n"
" Some text here\r\n"
" \r\n"
""