|
![]() |
#1 |
Участник
|
Особенно пристально обратить внимание на метод
protected XMLElement appendXMLElement(XMLElement _toXmlElement, str _elementName, str _elementValue) { XMLElement xmlElement; XMLText xmlText; ; xmlElement = xmlDoc.createElement(_elementName); xmlText = xmlDoc.createTextNode(_elementValue); xmlElement.appendChild(xmlText); _toXmlElement.appendChild(xmlElement); _toXmlElement.appendChild(xmlDoc.createTextNode(#delimiterEnter)); return xmlElement; } где #define.delimiterEnter('\n') - видимо как раз то что нужно Ivanhoe |
|
![]() |
#2 |
Участник
|
Какой-то закат солнца вручную.
А можно что-нибудь замутить с xmlNode.prefix, xmlNode.InserAfter, xmlDoc.createSignificantWhitespace, xmlDoc.preserveWhitespace? примеров кода не могу найти. |
|
![]() |
#3 |
Участник
|
Угу. Пока не понял до конца.
Но использовать XMLelement и XMLdocument для форматирования вывода - закат солнца вручную. xmlDocument, xmlNode, xmlElement - это для хранения разобранного XML в памяти (!) и для работы с ним. Для вывода нужно пользоваться классом xmlWriter, который просто выводит в планарный неразобранный текст. См. перекрестные ссылки, чтобы посмотреть пример использования. Ну и про экранирование спец.символов - ура! - оно экранирует. Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д. |
|
![]() |
#4 |
Участник
|
Разобрался.
Можно и xmlDocument выводить. Выложу пример кода, чтобы потом самому не вспоминать X++: static void Job1(Args _args) { XmlDocument doc = XmlDocument::newBlank(); XmlElement root; XmlElement channel; XMLWriterSettings xmlWriterSettings = new XMLwriterSettings(); XMLWriter xml; root = doc.appendChild(doc.createElement("rss")); root.setAttribute("version","2.0"); channel = root.appendChild(doc.createElement("channel")); channel.appendChild(doc.createElement("title")).innerText("Text for title"); channel.appendChild(doc.createElement("description")).innerText("Text for description"); channel.appendChild(doc.createElement("link")).innerText("http://mySuperLink"); xmlWriterSettings.indent(true); //xmlWriterSettings.indentChars(' '); // можно и не указывать xml = XMLwriter::newXml(xmlWriterSettings); doc.writeTo(xml); xml.flush(); info(xml.writeToString()); } Но вообще говоря, xmlDocument - это избыточно, если нужно всего-лишь вывести генерируемый на лету xml. Если xml только выводится, то вполне достаточно следующего кода X++: xml.writeStartDocument(); xml.writeStartElement("rss"); xml.writeAttributeString("version","2.0"); xml.writeStartElement("channel"); ... xml.writeEndElement(); xml.writeEndElement(); xml.writeEndDocument(); Во writerSettings можно задавать и символы перевода строки, и строку для отступов и т.п. |
|
|
За это сообщение автора поблагодарили: Maxim Gorbunov (3), alex55 (1). |
![]() |
#5 |
Участник
|
Спасибо, добрый человек, _scorp_, что послал к источнику знаний - MSDN
![]() в общем, в Аксапте реализована обертка к .net классу System.Xml.XmlWriter Документация здесь http://msdn.microsoft.com/ru-ru/libr...xmlwriter.aspx краткое описание http://msdn.microsoft.com/ru-ru/library/4d1k42hb.aspx документация на system.xml.xmlwritersettings http://msdn.microsoft.com/ru-ru/libr...rsettings.aspx документация на system.xml.xmldocument http://msdn.microsoft.com/ru-ru/libr...ldocument.aspx документация на System.Xml.XmlNode http://msdn.microsoft.com/ru-ru/libr...l.xmlnode.aspx Ну, и так далее... ![]() Кроме того, интересное описание реализации похожей штуки http://ru2.php.net/manual/ru/book.xmlwriter.php В общем, не надо выполнять "закат солнца вручную". Надо просто доку поискать. ![]() |
|
|
За это сообщение автора поблагодарили: Asterisk (1). |
Теги |
excel, xml, отчет, форматирование |
|
|