Re: MSXML + XSL программно (Сохранение с отступами 2)
От: Penetron Россия  
Дата: 03.08.07 12:21
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, youreeck, Вы писали:


Y>>и вдогонку про форматирование вывода XML файла — как применить этот самый XSL <xsl:output indent="yes"\> программно... :shuffle:


OE>вот утилитка с исходниками (VC7.1), которая форматирует заданный XML так — загружает его, сохраняет в файле XSL из своих ресурсов, загружает его тоже в MSXML документ, потом делается transformNode и полученный документ сохраняется на месте исходного.


OE>Надо сказать, что такой метод работает практически на порядок быстрее, чем расставление переносов строки после каждого тега.



А зачем такой большой xsl? Можно и проще:

    MSXML2::IXMLDOMDocumentPtr doc, xsl;

    xsl->loadXML( 
        "<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version=\"1.0\">"
            "<xsl:output indent=\"yes\" />"
            "<xsl:template match=\"*|@*|text()|comment()|processing-instruction()\">\r\n"
                "<xsl:copy>\r\n"
                    "<xsl:apply-templates select=\"*|@*|text()|comment()|processing-instruction()\"/>\r\n"
                "</xsl:copy>\r\n"
            "</xsl:template>"
        "</xsl:stylesheet>"
    );

    _bstr_t result = doc->transformNode( xsl );


здесь главное сохранить некоторые \r\n в шаблоне.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.