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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2010, 14:26   #1  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
XML
Помогите с XML Мне нужно получить файл вида

<?xml version="1.0" encoding = "utf-8"?>
<section>
<id>1001</id>
<sum> 100</sum>
<section>

Делаю так
X++:
    xmlDocument = XMLDocument::newBlank();
    xmlDocument.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
все равно кодировка
<?xml version="1.0" encoding="iso-8859-1" ?>

Где посмотреть подобные примеры?
Старый 06.04.2010, 14:53   #2  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Если я не путаю, то кодировку нужно проставлять в самом методе "newBlank". Попробуйте что-то вроде этого (Проблема с сохранением XML).
За это сообщение автора поблагодарили: novic (1).
Старый 06.04.2010, 16:26   #3  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Спасибо с кодировкой разобрался. Теперь не получается


X++:
    root   = xmlDocument.createNode(XMLNodeType::ELEMENT, #Name, "");
    root2  = xmlDocument.createNode(XMLNodeType::ELEMENT, #Date, "");
    root3  = xmlDocument.createNode(XMLNodeType::ELEMENT, #By, "");

    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    node = xmlDocument.createTextNode(date2str(today(), 123,2,2,2,2,2));
    docElem3 = docElem.appendChild(root3);
    node = xmlDocument.createTextNode('Ivan');

    xmlDocument.save("c:\\XML.xml");
На выходе
PHP код:
<?xml version="1.0" encoding="utf-8" ?> 
- <Name>
  <Date/>          // ??
  <By />           //  ??
  </Name>
Что не так?
Старый 06.04.2010, 16:40   #4  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
Попробуйте что нибудь типа:
X++:
    root   = xmlDocument.createNode(XMLNodeType::ELEMENT, #Name, "");
    root2  = xmlDocument.createNode(XMLNodeType::ELEMENT, #Date, "");
    root2.nodeValue(date2str(today(), 123,2,2,2,2,2));
    root3  = xmlDocument.createNode(XMLNodeType::ELEMENT, #By, "");
    root3.nodeValue('Ivan');

    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    docElem3 = docElem.appendChild(root3);

    xmlDocument.save("c:\\XML.xml");
Правда я это по памяти писал, за работоспособность не ручаюсь

Последний раз редактировалось PavelX; 06.04.2010 в 16:42. Причина: поправил теги
Старый 06.04.2010, 16:49   #5  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Метод "nodeValue" в COM-объекте класса "IXMLDOMElement" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Это действие невозможно выполнить для узла типа ELEMENT.
Старый 06.04.2010, 17:08   #6  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
Ошибочка, попробуйте так:
X++:
    root   = xmlDocument.createNode(XMLNodeType::ELEMENT, "Name", "");
    root2  = xmlDocument.createNode(XMLNodeType::ELEMENT, "Date", "");
    root3  = xmlDocument.createNode(XMLNodeType::ELEMENT, "By", "");

    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    docElem3 = docElem.appendChild(root3);

    root2.text(date2str(today(), 123,2,2,2,2,2));
    root3.text('Ivan');

    xmlDocument.save("С:\\XML.xml");
Старый 06.04.2010, 17:15   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от PavelX Посмотреть сообщение
Ошибочка, попробуйте так:
что вам пытаются втолковать:
задавайте текст у только что созданного элемента, а не у документа.

Неправильно:
X++:
    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    node = xmlDocument.createTextNode(date2str(today(), 123,2,2,2,2,2));
Правильно
X++:
    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    node = docElem2.createTextNode(date2str(today(), 123,2,2,2,2,2));
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2010, 17:18   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну, если взять исходную задачу, то нужно что-нибудь подобное:
Код:
  XMLElement      filedNode, xmlElementRoot;

  ;

  xmlElementRoot= xmlDocument.createElement("section");
     filedNode= xmlDocument.createElement("id");
       filedNode.text("1001");
     xmlElementRoot.appendChild(filedNode);

     filedNode= xmlDocument.createElement("sum");
       filedNode.text("100");
     xmlElementRoot.appendChild(filedNode);

   xmlDocument.appendChild(xmlElementRoot);
Еще вариант, делать так как написал mazzy

Последний раз редактировалось Raven Melancholic; 06.04.2010 в 17:20. Причина: mazzy обогнал
Старый 06.04.2010, 23:43   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
А если без класса XMLDocument ? если просто писать нужное содержание со всеми тегами в текстовый файл с расширением xml ?
Старый 07.04.2010, 06:05   #10  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Просто для информации - формат даты в XML
PHP код:
<Date>2001-12-31</Date
поэтому лучше наверное так
X++:
node = xmlDocument.createElement("Date");
node.text(date2str(date, 321, 2, 3, 2, 3, 4));
rootNode.appendChild(node);
__________________
Axapta non erubescit
Старый 07.04.2010, 07:53   #11  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Версия AX - 5.0?
Если так, можно использовать технологию LINQ, с ней гораздо удобнее создавать XML документы.
Нужно подключить ссылку (reference) на System.Xml.Linq (правда нужен .Net framework 3.5 версии)
код создания вашего док-та:
X++:
 System.Xml.Linq.XElement document=new  System.Xml.Linq.XElement(System.Xml.Linq.XName::Get("section"));
    System.Exception e;
 
    ;
    try
    {
 
        document.Add(new System.Xml.Linq.XElement(System.Xml.Linq.XName::Get("id"),1001));
        document.Add(new System.Xml.Linq.XElement(System.Xml.Linq.XName::Get("sum"),100));
 
        document.Save("c:\\test.xml");
    }
    catch(Exception::CLRError)
    {
        e = ClrInterop::getLastException();
        while( e )
        {
            info( e.get_Message() );
            e = e.get_InnerException();
        }
    }

Последний раз редактировалось jonny; 07.04.2010 в 08:01.
За это сообщение автора поблагодарили: gl00mie (5).
Старый 07.04.2010, 08:08   #12  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Правильно
X++:
    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    node = docElem2.createTextNode(date2str(today(), 123,2,2,2,2,2));
Но "Класс XMLNode не содержит эту функцию."
Старый 07.04.2010, 08:52   #13  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Цитата:
Сообщение от PavelX Посмотреть сообщение
Ошибочка, попробуйте так:
X++:
    root   = xmlDocument.createNode(XMLNodeType::ELEMENT, "Name", "");
    root2  = xmlDocument.createNode(XMLNodeType::ELEMENT, "Date", "");
    root3  = xmlDocument.createNode(XMLNodeType::ELEMENT, "By", "");

    docElem = xmlDocument.appendChild(root);
    docElem2 = docElem.appendChild(root2);
    docElem3 = docElem.appendChild(root3);

    root2.text(date2str(today(), 123,2,2,2,2,2));
    root3.text('Ivan');

    xmlDocument.save("С:\\XML.xml");
Вот так получается.

Последний раз редактировалось novic; 07.04.2010 в 09:08.
Теги
xml, кодировка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
X++: Serializing Axapta Foundation Class instances as XML streams Blog bot DAX Blogs 0 04.06.2009 23:05
PatrickChua: XML serialization Blog bot DAX Blogs 0 04.05.2009 14:05
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 04.05.2009 14:05
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
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:52.