|
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). |
01.12.2008, 09:43 | #8 |
Участник
|
Если вернутся к исходному вопросу темы - как сделать перевод строки внутри одного child? Я не программист, может не так что-то объясняю?
В приведенном mazzy примере, как сделать чтобы "Text for description" вывелось так: "Text for description"
__________________
Ivanhoe as is.. |
|
01.12.2008, 09:48 | #9 |
MCITP
|
Цитата:
Для записи спецсимволов используется слэш-нотация '\n', '\r', '\t' и т.д
__________________
Zhirenkov Vitaly |
|
01.12.2008, 10:04 | #10 |
Участник
|
|
|
01.12.2008, 10:01 | #11 |
Участник
|
В том то и дело, что нет.
__________________
Ivanhoe as is.. |
|
01.12.2008, 10:17 | #12 |
MCITP
|
Цитата:
Если открыть в блокнотике, то видно, что работает. А вот в IE этого перевода строки не видно.
__________________
Zhirenkov Vitaly |
|
01.12.2008, 11:05 | #13 |
Участник
|
|
|
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:07 | #16 |
Участник
|
Если просто запустить приведенный джоб, то все работает и в Excel.
Сейчас нашел место, где происходит собственно потеря переноса строки. У нас есть следующий метод в новом классе для вывода отчетов в xml-Excel: X++: client static void setNodeText(XMLElement _e, str _text) { ; _e.text(_text); } Куда копать?
__________________
Ivanhoe as is.. |
|
01.12.2008, 11:30 | #17 |
Участник
|
Цитата:
|
|
01.12.2008, 11:50 | #18 |
Участник
|
Цитата:
Если кратко: 1. быстро и удобно разрабатывать новые отчеты (в том числе менять существующие) - программистам хорошо; 2. быстро и красиво формируется документ - хорошо пользователям и их руководителям )
__________________
Ivanhoe as is.. |
|
01.12.2008, 12:05 | #19 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Цель использования связки xml-Excel - быстрое построение красивых отчетов. На практике делались шаблонные формы (акты, накладные и т.п.), приказы (кадровые), всевозможная отчетность (в том числе с последующим автоматическим построением сводных таблиц).
Если кратко: 1. быстро и удобно разрабатывать новые отчеты (в том числе менять существующие) - программистам хорошо; 2. быстро и красиво формируется документ - хорошо пользователям и их руководителям ) |
|
01.12.2008, 12:14 | #20 |
Участник
|
Вот примерно по тому же пути что и Вы в самом начале темы пошли другие форумчане, отсылая меня к примерам в Аксапте ) Стандартные классы аксапты замечательно тэги форматируют, xml смотрю в программке Bred - очень все наглядно
Кстати, раз уж упомянул программку, могу посоветовать как альтернативу Блокноту - маленькая, быстрая, удобно работать с синтаксической подсветкой и различными кодировками.
__________________
Ivanhoe as is.. |
|
Теги |
excel, xml, отчет, форматирование |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|