AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.12.2009, 14:10   #41  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,555 / 2379 (85) +++++++++
Регистрация: 20.08.2005
Можно сдалать с помощью EntityReference

X++:
static void Job1(Args _args)
{
    XMLDocument xml = new XMLDocument();
    XMLNode      node;
    XMLElement  element;
    XMLEntityReference  ref;
    ;
    ref = xml.createEntityReference("x10");
    element = xml.createElement("Element1");
    xml.appendChild(element);
    node = xml.createElement("Node1");
    element.appendChild(node);
    node.appendChild(xml.createTextNode("Строка 1" ));
    node.appendChild(ref);
    node.appendChild(xml.createTextNode("Строка 2" ));

    info(xml.toString());
}
UPD
Пардон, решетку так нельзя передать
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 29.12.2009 в 14:18.
Старый 29.12.2009, 14:21   #42  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,183 / 2358 (87) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от Jackally Посмотреть сообщение
т.е. этот парсер заменил все спец. символы <, > и &. Он делает "полезную" работу, ведь наверняка есть способ выключить эту возможность...
Парсеру надо просто сформирвоать в терминах дерева DOM то, что вы хотите. Я имел ввиду просто в CDATA вставить перевод строки безо всяких кодов.

Типа http://msdn.microsoft.com/en-us/libr...tasection.aspx
X++:
static void Job3(Args _args)
{
    XMLDocument doc = XMLDocument::newXml('<test/>');
    doc.root().appendChild(doc.createCDataSection('a\r\nb'));
    doc.save(@'c:\0\1.xml');
}
В XML пробельные символы не сохраняются, так как принято, что они не важны. Если они важны используются секции CDATA
За это сообщение автора поблагодарили: Damn (2), Jackally (0), alex55 (1).
Старый 29.12.2009, 15:26   #43  
Jackally is offline
Jackally
Участник
 
15 / 10 (1) +
Регистрация: 08.08.2006
Цитата:
Сообщение от belugin Посмотреть сообщение
Парсеру надо просто сформирвоать в терминах дерева DOM то, что вы хотите. Я имел ввиду просто в CDATA вставить перевод строки безо всяких кодов.

Типа http://msdn.microsoft.com/en-us/libr...tasection.aspx
X++:
static void Job3(Args _args)
{
    XMLDocument doc = XMLDocument::newXml('<test/>');
    doc.root().appendChild(doc.createCDataSection('a\r\nb'));
    doc.save(@'c:\0\1.xml');
}
В XML пробельные символы не сохраняются, так как принято, что они не важны. Если они важны используются секции CDATA
Спасибо, практически то что нужно )
Если я пишу текст в createCDataSection('fgsfg \n dsfsdf'); то в xml файле я получаю
'fgsfg & #13;& #10; dsfsdf' и текст наконец-таки стал разделятся на разные строки )
Единственная неприятная мелочь, так то что он настоятельно вставляет 13ый и 10ый символы вместе, даже если отпраляешь только '\n' или только '\r'.
А эксель 13ый символ не понимает и отображает квадратиком, как-то некрасиво ((
Старый 29.12.2009, 15:47   #44  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,183 / 2358 (87) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
какая версия аксапты? у меня получается

X++:
3c746573 743e3c21 5b434441 54415b61  # 00000000 <test><![CDATA[a
0a625d5d 3e3c2f74 6573743e           # 00000010 .b]]></test>
Старый 29.12.2009, 16:19   #45  
Jackally is offline
Jackally
Участник
 
15 / 10 (1) +
Регистрация: 08.08.2006
Я, кажется, понял в чем фишка... у меня в XMLElement уже много чего писалось до этого, т.е. он не чистый, видимо парсер из-за этого переклинивает и он не выделяет тэгом CDATA, а сам заменяет всё что нужно спец символами, т.е. как бы тот же результат...
Теперь хоть ясно куда копать и как глубоко, спасибо )
Старый 29.12.2009, 18:21   #46  
Jackally is offline
Jackally
Участник
 
15 / 10 (1) +
Регистрация: 08.08.2006
я ошибся, всё так и есть, в XML файле текст выделяется тэгом CDATA, проблема происходит дольше (( при открытии файла в Excel, сам ёксель его конвертит таким образом что вставляется в места перевода строк символы 13 и 10, пробывали открывать в разных Экселях, одно и то же. В местах перевода строк с помощью CDATA появляется "квадратик"... (
Старый 11.01.2010, 09:39   #47  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 133 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Цитата:
Сообщение от Jackally Посмотреть сообщение
У меня такая же проблема что и у Ivanhoe, для неё всё-таки нашлось решение?

Т.е. я отправляю в XMLElement или \r, или \n, все равно получаю символ в xml-документе просто пробел, как насильно вставить туда именно перевод строки? Если в ручную в Экселе вставить перевод строки, то в xml документе он запишется как "& # 10;". Пытаюсь отправить этот код в XMLElement, на выходе в документе получаю некий преобразованный код "& amp; #10;", что уже не работает как перевод строки.

Понимаю, что закат солнца вручную, но если сохранять документ таким образом?

X++:
textBuffer.appendText(xMLDocument.xml());
textBuffer.replace("&amp;#10;", "& #10;");
textBuffer.toFile(filename);

Последний раз редактировалось b_nosoff; 11.01.2010 в 09:56.
Старый 21.05.2010, 13:34   #48  
Lokki is offline
Lokki
Участник
 
2 / 13 (1) ++
Регистрация: 01.02.2007
X++:
static void Job17(Args _args)
{
     XMLDocument        xmlDoc = XMLDocument::newFile(@"C:\1.xml"); // Неформатированный xml
     XMLTextWriter       xmlTextWriter;
     ;

     xmlTextWriter = xmlTextWriter::newFile(@"C:\2.xml");

     xmlTextWriter.formatting(XMLFormatting::Indented);
     xmlTextWriter.indentation(0); // Число символов смещения

     xmlDoc.writeTo(xmlTextWriter);
}

Последний раз редактировалось Lokki; 21.05.2010 в 14:01.
Старый 13.02.2012, 12:54   #49  
Damn is offline
Damn
Участник
 
345 / 98 (4) ++++
Регистрация: 28.05.2003
Адрес: Москва
Цитата:
Сообщение от b_nosoff Посмотреть сообщение
Понимаю, что закат солнца вручную, но если сохранять документ таким образом?

X++:
textBuffer.appendText(xMLDocument.xml());
textBuffer.replace("&amp;#10;", "& #10;");
textBuffer.toFile(filename);
Этот способ не работает при больших объёмах xml. Причём при определённом пороге перестаёт срабатывать xMLDocument.xml(), и если appendText заменить на сохранение в файл xMLDocument.save( fileName) и чтение из него textBuffer.fromFile( fileName), то при достижении следующего порога начинает зависать этот самый fromFile.
В частности, у себя я заметил что fromFile зависал при размере файла больше примерно 42 мегабайт. Приходилось завершать работу аксапты диспетчером задач.
__________________
Дмитрий
Теги
excel, xml, отчет, форматирование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
axStart: How to use XSLT in AIF and what’s wrong with empty xml Nodes. Blog bot DAX Blogs 0 27.04.2008 18:07
Inside Dynamics AX 4.0: The XML Structure Blog bot DAX Blogs 0 04.10.2007 11:20
перевод строки - это только 0x0A?? Dymm DAX: Программирование 1 15.03.2006 10:50
перевод строки в radiobutton kitty DAX: Программирование 2 19.07.2005 12:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.