Добавлю готовый тестовый джоб, для экономии времени желающим что-нибудь выгрузить в нетрадиционной кодировке из 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 за полезные подсказки