| 
			
			 | 
		#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 ;" - вставил пробелы, иначе не видно в обозревателе ![]() Именно вот этот управляющий символ мне и нужен. В итоге (тема поднималась почти год назад   пришлось делать насильную замену переносов строк в классе отчета на "определенную строку" и после формирования итогового xml-файла делать в нем замену "определенной строки" на "& # 10 ;"
		
				__________________ 
		
		
		
		
		
			Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 01.12.2008 в 11:52.  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Если кратко: 1. быстро и удобно разрабатывать новые отчеты (в том числе менять существующие) - программистам хорошо; 2. быстро и красиво формируется документ - хорошо пользователям и их руководителям  )
		
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| Теги | 
| excel, xml, отчет, форматирование | 
| 
	
	 | 
	
		
		
  |