14.01.2008, 18:30 | #1 |
Участник
|
Перевод строки в xml-файле
Подскажите, пожалуйста, есть ли возможность сформировать xml-файл на основе шаблона, подготовленного в Excel, и записать в ячейку текст с переводом строки?
Т.е. в ячейку вывести не "1. первая строка 2. вторая строка", а "1. первая строка 2. вторая строка". Используются стандартные классы XMLDocument, XMLElement. При записи, например, текст "
" (перевод строки в нотации xml), Аксапта меняет на "&#10", что отображается как обычный текст
__________________
Ivanhoe as is.. |
|
01.02.2008, 07:42 | #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/> Большая просьба- ответить в кратчайшие сроки, плиз |
|
01.02.2008, 16:37 | #3 |
Участник
|
Совет - обоим.
Посмотрите класс RPayNDFL2File . Это выгрузка справки 2НФЛ в XML . Запускается из реестра сведений о доходах - формы RpayTaxListTable. Там уж наверняка в том формате который вам нужен . А еще лучше поиграться с классом и глазками посмотреть на то что он выгружает . Думаю все вопросы сами собой отпадут |
|
01.02.2008, 16:42 | #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 |
|
29.11.2008, 17:06 | #5 |
Участник
|
Какой-то закат солнца вручную.
А можно что-нибудь замутить с xmlNode.prefix, xmlNode.InserAfter, xmlDoc.createSignificantWhitespace, xmlDoc.preserveWhitespace? примеров кода не могу найти. |
|
29.11.2008, 17:50 | #6 |
Участник
|
Угу. Пока не понял до конца.
Но использовать XMLelement и XMLdocument для форматирования вывода - закат солнца вручную. xmlDocument, xmlNode, xmlElement - это для хранения разобранного XML в памяти (!) и для работы с ним. Для вывода нужно пользоваться классом xmlWriter, который просто выводит в планарный неразобранный текст. См. перекрестные ссылки, чтобы посмотреть пример использования. Ну и про экранирование спец.символов - ура! - оно экранирует. Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д. |
|
29.11.2008, 18:16 | #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). |
29.11.2008, 19:03 | #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). |
01.12.2008, 09:43 | #9 |
Участник
|
Если вернутся к исходному вопросу темы - как сделать перевод строки внутри одного child? Я не программист, может не так что-то объясняю?
В приведенном mazzy примере, как сделать чтобы "Text for description" вывелось так: "Text for description"
__________________
Ivanhoe as is.. |
|
01.12.2008, 09:48 | #10 |
MCITP
|
Цитата:
Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д
__________________
Zhirenkov Vitaly |
|
01.12.2008, 10:01 | #11 |
Участник
|
В том то и дело, что нет.
__________________
Ivanhoe as is.. |
|
01.12.2008, 10:04 | #12 |
Участник
|
|
|
01.12.2008, 10:17 | #13 |
MCITP
|
Цитата:
Если открыть в блокнотике, то видно, что работает. А вот в IE этого перевода строки не видно.
__________________
Zhirenkov Vitaly |
|
01.12.2008, 10:20 | #14 |
Участник
|
Исходно интересует Excel
__________________
Ivanhoe as is.. |
|
01.12.2008, 10:29 | #15 |
Участник
|
С точки зрения XML и HTML этот перевод ничего не значит просто.
что надо сгенерить с точки зрения XML? Entity какую-нибудь? Если имеется ввиду xlsx то там так же как я написал - то есть должно прокатить Последний раз редактировалось belugin; 01.12.2008 в 10:33. |
|
01.12.2008, 11:05 | #16 |
Участник
|
|
|
01.12.2008, 11:07 | #17 |
Участник
|
Если просто запустить приведенный джоб, то все работает и в Excel.
Сейчас нашел место, где происходит собственно потеря переноса строки. У нас есть следующий метод в новом классе для вывода отчетов в xml-Excel: X++: client static void setNodeText(XMLElement _e, str _text) { ; _e.text(_text); } Куда копать?
__________________
Ivanhoe as is.. |
|
01.12.2008, 11:30 | #18 |
Участник
|
Цитата:
|
|
01.12.2008, 11:44 | #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 ;" - вставил пробелы, иначе не видно в обозревателе Именно вот этот управляющий символ мне и нужен. В итоге (тема поднималась почти год назад пришлось делать насильную замену переносов строк в классе отчета на "определенную строку" и после формирования итогового xml-файла делать в нем замену "определенной строки" на "& # 10 ;"
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 01.12.2008 в 11:52. |
|
01.12.2008, 11:50 | #20 |
Участник
|
Цитата:
Если кратко: 1. быстро и удобно разрабатывать новые отчеты (в том числе менять существующие) - программистам хорошо; 2. быстро и красиво формируется документ - хорошо пользователям и их руководителям )
__________________
Ivanhoe as is.. |
|
Теги |
excel, xml, отчет, форматирование |
|
|