Показать сообщение отдельно
Старый 25.09.2008, 17:26   #3  
zinius is offline
zinius
Участник
 
24 / 11 (1) +
Регистрация: 26.01.2005
Thumbs up
Добавлю готовый тестовый джоб, для экономии времени желающим что-нибудь выгрузить в нетрадиционной кодировке из Ax 3.0

Задача - выгрузить набор текстовых строк из аксапты в файл нужной кодировки.

кодировка указывается в define, в моём случае это ISO-8859-5
(ключевые слова UTF-8, UTF-16 и прочий unicode)

X++:
#define.FILE('FILE')
#define.LINE('LINE')
#define.codePage('ISO-8859-5')
#define.fileFullName(@'D:\testXML_ISO.txt')
static void Test_XML2ISO(Args _args)
{
    XMLDocument doc = XMLDocument::newBlank();
    XMLElement  file = doc.createElement(#FILE);
    XMLElement  line;
    int         i;

    str xslt = ' <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> '+
               ' <xsl:output omit-xml-declaration="no" method="text" media-type="text/xml"       '+
               ' indent="no" encoding="'+#codePage+'" />                                         '+
               ' <xsl:template match="'+#LINE+'">                                                '+
               ' <xsl:apply-templates/>                                                          '+
               '        <xsl:if test="following-sibling::node()">                                '+
               '           <xsl:text>XXX</xsl:text>                                              '+
               '        </xsl:if>                                                                '+
               '     </xsl:template>                                                             '+
               '  </xsl:stylesheet>                                                              ';

    void outputXML(XMLDocument _xml)
    {
        COM         outputStream;
        XMLDocument xsl = XMLDocument::newXML(xslt);
        ;

        outputStream = new COM('ADODB.Stream');
        outputStream.type(1); // binary
        outputStream.open();

        _xml.com().transformNodeToObject(xsl.com(), outputStream);

        outputStream.saveToFile(#fileFullName);
        outputStream.close();
    }
    ;


    if (WinAPI::fileExists(#fileFullName))
        WinAPI::deleteFile(#fileFullName);

    doc.appendChild(file);

    for (i=1; i<=10; i++)
    {
        line = doc.createElement(#LINE);
        line.appendChild(doc.createTextNode(strFmt('line %1 ABCDE АБВГДЕЖЗИКабвгдежзик', i)));
        file.appendChild(line);
    }
    outputXML(doc);

    info('Готово');
}
XXX надо исправить на "
_;" без кавычек и подчёркивания

Также выражаю признательность и большую спасибу EVGL и belugin за полезные подсказки

Последний раз редактировалось zinius; 25.09.2008 в 17:46.
За это сообщение автора поблагодарили: d_alexe (1).