06.04.2010, 14:26 | #1 |
Axapta Retail User
|
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 |
Участник
|
Если я не путаю, то кодировку нужно проставлять в самом методе "newBlank". Попробуйте что-то вроде этого (Проблема с сохранением XML).
|
|
|
За это сообщение автора поблагодарили: novic (1). |
06.04.2010, 16:26 | #3 |
Axapta Retail User
|
Спасибо с кодировкой разобрался. Теперь не получается
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 код:
|
|
06.04.2010, 16:40 | #4 |
MCTS
|
Попробуйте что нибудь типа:
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 |
Axapta Retail User
|
Метод "nodeValue" в COM-объекте класса "IXMLDOMElement" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Это действие невозможно выполнить для узла типа ELEMENT.
|
|
06.04.2010, 17:08 | #6 |
MCTS
|
Ошибочка, попробуйте так:
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 |
Участник
|
что вам пытаются втолковать:
задавайте текст у только что созданного элемента, а не у документа. Неправильно: 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)); |
|
06.04.2010, 17:18 | #8 |
Участник
|
Ну, если взять исходную задачу, то нужно что-нибудь подобное:
Код: 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); Последний раз редактировалось Raven Melancholic; 06.04.2010 в 17:20. Причина: mazzy обогнал |
|
06.04.2010, 23:43 | #9 |
Участник
|
А если без класса XMLDocument ? если просто писать нужное содержание со всеми тегами в текстовый файл с расширением xml ?
|
|
07.04.2010, 06:05 | #10 |
Читатель
|
Просто для информации - формат даты в XML
PHP код:
X++: node = xmlDocument.createElement("Date"); node.text(date2str(date, 321, 2, 3, 2, 3, 4)); rootNode.appendChild(node); |
|
07.04.2010, 07:53 | #11 |
Участник
|
Версия 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 |
Axapta Retail User
|
|
|
07.04.2010, 08:52 | #13 |
Axapta Retail User
|
Цитата:
Сообщение от 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, кодировка |
|
|