Форматирование XML-файла при сохранении DOM-представления

Q. MSXML сохраняет документы в “одну строку”. Как сделать вывод xml-файла в виде дерева с отступами?


А [Anton Lapounov]. Можно пройтись по дереву и вставить текстовые узлы с отступами с помощью следующей рекурсивной функции:

// Украсить XML-дерево вставкой отступов. (C) Anton Lapounov 2005
function Indent(node, curIndent, levelIndent)
{
    // Если у узла нет содержимого, ничего не делать
    if (!node.hasChildNodes)
    {
        return;
    }
 
    // Если содержимое включает текстовые узлы, ничего не делать
    for (var child = node.firstChild; child != null; child = child.nextSibling)
    {
        if (child.nodeType == 3 ||  // PCDATA
            child.nodeType == 4)    // CDATA
        {
            break;
        }
    }
 
    if (child != null)
    {
        return;
    }
 
    // Вставить текстовые узлы с отступами между дочерними узлами и обработать их рекурсивно
    var newIndent = curIndent + levelIndent;
    var textNode = node.ownerDocument.createNode(3, "", "");
    textNode.text = newIndent;
 
    for (child = node.firstChild; child != null; child = child.nextSibling)
    {
        node.insertBefore(textNode.cloneNode(false), child);
        Indent(child, newIndent, levelIndent);
    }
 
    textNode.text = curIndent;
    node.appendChild(textNode);
}
 
// Пример использования функции Indent:
 
// Загрузить XML-документ из файла input.xml
var doc = new ActiveXObject("MSXML2.DomDocument");
doc.async = false;
 
if (!doc.load("input.xml"))
{
    WScript.Echo("ERROR: " + doc.parseError.reason);
    WScript.Quit(1);
}
 
// Вставить отступы: перевод строки + 2 пробела на каждый уровень
Indent(doc.documentElement, "\n", "  ");
 
// Показать документ с отступами
WScript.Echo(doc.xml);
 
// Сохранить документ с отступами в файл output.xml
doc.save("output.xml");
 
  faq/save_indent.txt · Последние изменения: 2012/03/27 05:15
 
Нас поддерживают: Предлагаем взять напрокат Мерседес W212, который адаптирован для эксплуатации на наших дорогах. . Подробное описание двуспальная кровать у нас. Рейтинг@Mail.ruliveinternet.ru