![]() |
#1 |
Участник
|
Перевод строки в xml-файле
Подскажите, пожалуйста, есть ли возможность сформировать xml-файл на основе шаблона, подготовленного в Excel, и записать в ячейку текст с переводом строки?
Т.е. в ячейку вывести не "1. первая строка 2. вторая строка", а "1. первая строка 2. вторая строка". Используются стандартные классы XMLDocument, XMLElement. При записи, например, текст "
" (перевод строки в нотации xml), Аксапта меняет на "&#10", что отображается как обычный текст ![]()
__________________
Ivanhoe as is.. |
|
![]() |
#2 |
Участник
|
Привет, я меня тоже есть вопрос, надеюсь получить ответ, а может мой вопрос перенесут/переадресуют куда надо, я здесь новичок, так что сорри
Вопрос про импорт из Аксапты в XML-файл, а этот файл дальше попадает в какую-то налоговую прогу вот например строки из Аксапты this.xmlSetPageAttr('osn', 0); this.xmlSetPageAttr('corr', 1); this.xmlSetPageAttr('uved', 0); this.xmlSetPageAttr('n_uved/' ????); this.xmlSetPageAttr('d_uved/' ????); В XML-файле это выглядит так: <osn>0</osn> <corr>1</corr> <uved></uved> <n_uved/> <d_uved/> <> </>- это открывающий и закрывающий тег, а вот что значит этот <n_uved/> and <d_uved/>???? что написать после кавычки вместо знака вопроса Мне сказали что это единичный тег, а как его написать чтобы он преобразовался из this.xmlSetPageAttr('n_uved/' ?) в <n_uved/> Большая просьба- ответить в кратчайшие сроки, плиз |
|
![]() |
#3 |
Участник
|
Совет - обоим.
Посмотрите класс RPayNDFL2File . Это выгрузка справки 2НФЛ в XML . Запускается из реестра сведений о доходах - формы RpayTaxListTable. Там уж наверняка в том формате который вам нужен . А еще лучше поиграться с классом и глазками посмотреть на то что он выгружает . Думаю все вопросы сами собой отпадут |
|
![]() |
#4 |
Участник
|
Особенно пристально обратить внимание на метод
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 |
|
![]() |
#5 |
Участник
|
Какой-то закат солнца вручную.
А можно что-нибудь замутить с xmlNode.prefix, xmlNode.InserAfter, xmlDoc.createSignificantWhitespace, xmlDoc.preserveWhitespace? примеров кода не могу найти. |
|
![]() |
#6 |
Участник
|
Угу. Пока не понял до конца.
Но использовать XMLelement и XMLdocument для форматирования вывода - закат солнца вручную. xmlDocument, xmlNode, xmlElement - это для хранения разобранного XML в памяти (!) и для работы с ним. Для вывода нужно пользоваться классом xmlWriter, который просто выводит в планарный неразобранный текст. См. перекрестные ссылки, чтобы посмотреть пример использования. Ну и про экранирование спец.символов - ура! - оно экранирует. Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д. |
|
![]() |
#7 |
Участник
|
Разобрался.
Можно и 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). |
![]() |
#8 |
Участник
|
Спасибо, добрый человек, _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). |
![]() |
#9 |
Участник
|
Если вернутся к исходному вопросу темы - как сделать перевод строки внутри одного child? Я не программист, может не так что-то объясняю?
В приведенном mazzy примере, как сделать чтобы "Text for description" вывелось так: "Text for description"
__________________
Ivanhoe as is.. |
|
![]() |
#10 |
MCITP
|
![]() Цитата:
Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д
__________________
Zhirenkov Vitaly |
|
![]() |
#11 |
Участник
|
В том то и дело, что нет.
__________________
Ivanhoe as is.. |
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
MCITP
|
![]() Цитата:
Если открыть в блокнотике, то видно, что работает. А вот в IE этого перевода строки не видно.
__________________
Zhirenkov Vitaly |
|
![]() |
#14 |
Участник
|
Исходно интересует Excel
__________________
Ivanhoe as is.. |
|
![]() |
#15 |
Участник
|
С точки зрения XML и HTML этот перевод ничего не значит просто.
что надо сгенерить с точки зрения XML? Entity какую-нибудь? Если имеется ввиду xlsx то там так же как я написал - то есть должно прокатить Последний раз редактировалось belugin; 01.12.2008 в 10:33. |
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Участник
|
Если просто запустить приведенный джоб, то все работает и в Excel.
Сейчас нашел место, где происходит собственно потеря переноса строки. У нас есть следующий метод в новом классе для вывода отчетов в xml-Excel: X++: client static void setNodeText(XMLElement _e, str _text) { ; _e.text(_text); } ![]() Куда копать? ![]()
__________________
Ivanhoe as is.. |
|
![]() |
#18 |
Участник
|
Цитата:
|
|
![]() |
#19 |
Участник
|
Небольшое исследование по выводу переноса в Excel-xml:
1. То, что формируется у меня - с потеряным переносом, в Екселе, понятно, в одну строку выводится: <Cell ss:StyleID="s29"><Data ss:Type="String">test it</Data></Cell> 2. Формирую строку указанным джобом, копирую в текстовом редакторе текст, получаю строку: <Cell ss:StyleID="s29"><Data ss:Type="String">test it</Data></Cell> Эта строка в текстовом редакторе переносится, но в Екселе - все равно в одну строку. 3. Открываю файл в Екселе, вставляю перенос строки прямо в ячейке, сохраняю файл, открываю в текстовом редакторе: <Cell ss:StyleID="s30"><Data ss:Type="String">test "& # 10 ;" it</Data></Cell> "& # 10 ;" - вставил пробелы, иначе не видно в обозревателе ![]() Именно вот этот управляющий символ мне и нужен. В итоге (тема поднималась почти год назад ![]()
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 01.12.2008 в 11:52. |
|
![]() |
#20 |
Участник
|
Цитата:
Если кратко: 1. быстро и удобно разрабатывать новые отчеты (в том числе менять существующие) - программистам хорошо; 2. быстро и красиво формируется документ - хорошо пользователям и их руководителям ![]()
__________________
Ivanhoe as is.. |
|
Теги |
excel, xml, отчет, форматирование |
|
|