Символы переноса строки при выгрузке в XML

1. AleksandrLeshkov 21.04.21 17:31 Сейчас в теме
Добрый день! Находил одну тему на форуме, но год у неё старый и решения там не увидел. Возможно за это время время что-то поменялось. Создал выгрузку в xml, но при выгрузке данные пишутся в одну строчку, без переносов строк. Есть ли какая-нибудь возможность добавить в файл xml символы, которые будут показывать, что в определённом месте должен быть перенос строки? В документе в 1С выглядит как на скрине
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 21.04.21 17:41 Сейчас в теме
(1)каким образом формируете XML?
3. AleksandrLeshkov 21.04.21 17:49 Сейчас в теме
(2)
Файл=Новый ЗаписьXML;
	Файл.ОткрытьФайл(Путь + "my_xml.xml");
	Файл.ЗаписатьОбъявлениеXML();
	Файл.ЗаписатьНачалоЭлемента("Корневой");
    	Файл.ЗаписатьАтрибут("ВыгружаемыйДокумент","Занятие");
		Файл.ЗаписатьКомментарий("Выгрузка домашнего задания");
		
		
	Запрос = Новый Запрос();
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Занятие.Дата КАК Дата,
	|	Занятие.Дисциплина КАК Дисциплина,
	|	Занятие.Преподаватель КАК Преподаватель,
	|	Занятие.ДомашнееЗадание КАК ДомашнееЗадание,
	|	Занятие.Тема КАК Тема,
	|	Занятие.Группа КАК Группа,
	|	Занятие.ВидНагрузки КАК ВидНагрузки
	|ИЗ
	|	Документ.Занятие КАК Занятие";
	
	Выборка =Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		Файл.ЗаписатьНачалоЭлемента("Элемент");
		Файл.ЗаписатьАтрибут("Дата",Строка(Выборка.Дата));
		Файл.ЗаписатьАтрибут("Дисциплина",Строка(Выборка.Дисциплина));
		
		
			Файл.ЗаписатьНачалоЭлемента("Преподаватель");
			Файл.ЗаписатьТекст(Строка(Выборка.Преподаватель));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("Тема");
			Файл.ЗаписатьТекст(Строка(Выборка.Тема));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("ДомашнееЗадание");
			Файл.ЗаписатьТекст(Строка(Выборка.ДомашнееЗадание));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("Группа");
			Файл.ЗаписатьТекст(Строка(Выборка.Группа));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("ВидНагрузки");
			Файл.ЗаписатьТекст(Строка(Выборка.ВидНагрузки));
			Файл.ЗаписатьКонецЭлемента();
	
		Файл.ЗаписатьКонецЭлемента();
	КонецЦикла;	
	
	
	Файл.ЗаписатьКонецЭлемента();
	Файл.Закрыть();
Показать


Вот такой код
4. spacecraft 21.04.21 17:57 Сейчас в теме
(1) используйте ПараметрыЗаписиXML.
Пример:
Файл = Новый ЗаписьXML;
Файл.ОткрытьФайл(Путь + "my_xml.xml", Новый ПараметрыЗаписиXML(,,,,Символы.ПС));
Файл.ЗаписатьОбъявлениеXML();
// здесь заполнение
Файл.Закрыть();
independ; nomad_irk; +2 Ответить
5. AleksandrLeshkov 21.04.21 18:16 Сейчас в теме
(4) А в заполнении какой-то другой код надо использовать или оставлять тот, что есть? В файле xml ничего не изменилось
6. spacecraft 21.04.21 18:32 Сейчас в теме
(5) заполнение не влияет. Чем смотрите?

А в каком месте ожидаете переносы увидеть?
Вот, для примера усеченный вариант того что получается:

<?xml version="1.0" encoding="UTF-8"?>
<Корневой ВыгружаемыйДокумент="Занятие">

<!--Выгрузка домашнего задания-->

<Элемент Дата="21.04.2021 18:32:07" Дисциплина="Дисциплина1">


<Преподаватель>Преподаватель1</Преподаватель>

</Элемент>
</Корневой>
Показать
7. AleksandrLeshkov 21.04.21 18:37 Сейчас в теме
(6) Смотрю в браузере и в блокноте. Вообще ожидаю, что в местах красных линий будут какие-то вставки типа символа или ещё чего, чтобы программисту сайта понятно было, что его обработчику описать для распознавания переносов. Или так не получится?
Прикрепленные файлы:
8. spacecraft 21.04.21 18:39 Сейчас в теме
(7) тогда это вообще не к записи xml вопросы. Должны сами найти в строке нужные места и добавить Символы.ПС. Вообще, по хорошему, с вставками ПС нужно было сохранять.
9. AleksandrLeshkov 21.04.21 18:41 Сейчас в теме
(8) а если не во всех случаях есть перенос, тогда этот способ всё равно будет переносить?
10. spacecraft 21.04.21 18:43 Сейчас в теме
11. spacecraft 21.04.21 18:47 Сейчас в теме
(7) вот для кода:
Файл=Новый ЗаписьXML;
	Файл.ОткрытьФайл("D:\Temp\1.xml");
    Файл.ЗаписатьОбъявлениеXML();
    Файл.ЗаписатьНачалоЭлемента("Корневой");
    Файл.ЗаписатьАтрибут("ВыгружаемыйДокумент","Занятие");
    Файл.ЗаписатьКомментарий("Выгрузка домашнего задания");
	Файл.ЗаписатьНачалоЭлемента("Элемент");
    Файл.ЗаписатьАтрибут("Дата",XMLСтрока(ТекущаяДата()));
    Файл.ЗаписатьАтрибут("Дисциплина",XMLСтрока("Дисциплина1"));
    Файл.ЗаписатьНачалоЭлемента("Преподаватель");
	СтрТекст = "Преподаватель1
			| Ghtgjl2";
    Файл.ЗаписатьТекст(XMLСтрока(СтрТекст));
    Файл.ЗаписатьКонецЭлемента();
    Файл.ЗаписатьКонецЭлемента();
	Файл.ЗаписатьКонецЭлемента();
    Файл.Закрыть();
Показать

Получаем:
<?xml version="1.0" encoding="UTF-8"?>
<Корневой ВыгружаемыйДокумент="Занятие">
<!--Выгрузка домашнего задания-->
<Элемент Дата="2021-04-21T18:49:09" Дисциплина="Дисциплина1">
<Преподаватель>Преподаватель1
Ghtgjl2</Преподаватель>
</Элемент>
</Корневой>
12. AleksandrLeshkov 21.04.21 18:50 Сейчас в теме
(11) Аа, т.е. я добавляю только в те места, где знаю что переносы будут? Например вот они могут быть только в Домашнем задании, значит только в него и добавляю. Верно?
13. spacecraft 21.04.21 18:52 Сейчас в теме
(12) Да. Ведь хотите внутри строки переносы. 1С ничего об этом не знает. Нужно самим внутри строки их установить.
15. AleksandrLeshkov 21.04.21 19:17 Сейчас в теме
(13) Простите за мою тормознутость, просто первый раз с этим столкнулся, начинающий программист. Сделал по Вашему примеру, получилось вот так. Что-то неправильно сделал?
Прикрепленные файлы:
16. spacecraft 21.04.21 19:24 Сейчас в теме
17. AleksandrLeshkov 21.04.21 19:24 Сейчас в теме
(16)
Путь = Константы.ПутьВыгрузкиДЗ.Получить();
	Файл=Новый ЗаписьXML;
	Файл.ОткрытьФайл(Путь + "my_xml.xml",Новый ПараметрыЗаписиXML(,,,,Символы.ПС));
	Файл.ЗаписатьОбъявлениеXML();
	Файл.ЗаписатьНачалоЭлемента("Корневой");
    	Файл.ЗаписатьАтрибут("ВыгружаемыйДокумент","Занятие");
		Файл.ЗаписатьКомментарий("Выгрузка домашнего задания");
		
		
	Запрос = Новый Запрос();
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Занятие.Дата КАК Дата,
	|	Занятие.Дисциплина КАК Дисциплина,
	|	Занятие.Преподаватель КАК Преподаватель,
	|	Занятие.ДомашнееЗадание КАК ДомашнееЗадание,
	|	Занятие.Тема КАК Тема,
	|	Занятие.Группа КАК Группа,
	|	Занятие.ВидНагрузки КАК ВидНагрузки
	|ИЗ
	|	Документ.Занятие КАК Занятие";
	
	Выборка =Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		Файл.ЗаписатьНачалоЭлемента("Элемент");
		Файл.ЗаписатьАтрибут("Дата",Строка(Выборка.Дата));
		Файл.ЗаписатьАтрибут("Дисциплина",Строка(Выборка.Дисциплина));
		
		
			Файл.ЗаписатьНачалоЭлемента("Преподаватель");
			Файл.ЗаписатьТекст(Строка(Выборка.Преподаватель));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("Тема");
			Файл.ЗаписатьТекст(Строка(Выборка.Тема));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("ДомашнееЗадание");
			СтрТекст = "ДомашнееЗадание1
						|/n";
			Файл.ЗаписатьТекст (XMLСтрока(СтрТекст));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("Группа");
			Файл.ЗаписатьТекст(Строка(Выборка.Группа));
			Файл.ЗаписатьКонецЭлемента();
			
			Файл.ЗаписатьНачалоЭлемента("ВидНагрузки");
			Файл.ЗаписатьТекст(Строка(Выборка.ВидНагрузки));
			Файл.ЗаписатьКонецЭлемента();
	
		Файл.ЗаписатьКонецЭлемента();
	КонецЦикла;	
	
	
	Файл.ЗаписатьКонецЭлемента();
	Файл.Закрыть();
Показать
20. spacecraft 21.04.21 19:41 Сейчас в теме
(15) а, понял. Смотрите в интернет эксплорере. Это просто особенность этого браузера. Он в текст не показывает переносы строк. особенность отображения html.
21. AleksandrLeshkov 21.04.21 19:43 Сейчас в теме
(20) Да, смотрю в эксплорере. Вообще мне нужно вставить именно символ (/n например), чтобы разраб сайта понял, в какой месте эти самые переносы должны быть
22. spacecraft 21.04.21 20:14 Сейчас в теме
(21) если нужно именно в браузере смотреть, то это совсем плохо.
Попробуйте добавить в качестве разделителя < br/ >. Но это так себе ...
СтрТекст = "ДомашнееЗадание1 < br/ >
	| Новая строка";
    Файл.ЗаписатьБезОбработки(СтрТекст);


Пробелы убрать внутри угловых скобок (на сайте изначально он не отображается)
14. spacecraft 21.04.21 18:56 Сейчас в теме
(1) и лучше не использовать Файл.ЗаписатьТекст(Строка(...));
Используйте XMLСтрока если нужно. Некоторые типы не так будут сохранены, как обычно принято в стандартах. Это особенно касается даты.
18. spacecraft 21.04.21 19:30 Сейчас в теме
(17)
СтрТекст = "ДомашнееЗадание1
|/n";

Вот этим что хотели сделать?
Я в своем коде просто привел пример, как нужно вставлять переносы в строке. У меня нет вашей базы и выборку не делал. Просто указав "|" не означает автоматически проставить куда-то переносы. Это символ вставки переноса в текст именно в том месте, где этот символ будет (с новой строки, означающий продолжение строки). ничего более. Можно без него:
СтрТекст = "Тут первая строка"+Символы.ПС+"тут вторая строка"+Символы.ПС+"тут треться строка";


а "/n" вообще не воспринимается 1С как разделитель. Это обычный текст.
19. AleksandrLeshkov 21.04.21 19:41 Сейчас в теме
(18) Т.е. получается надо в запросе получается что-то ещё предусмотреть?
23. AleksandrLeshkov 22.04.21 09:48 Сейчас в теме
Решил ситуацию следующим образом
            Файл.ЗаписатьНачалоЭлемента("ДомашнееЗадание");
			Файл.ЗаписатьТекст(СтрЗаменить(Выборка.ДомашнееЗадание,Символы.ПС,"/n"));
			Файл.ЗаписатьКонецЭлемента();


Правда символ ставится и в конце строки и начале следующей, но в целом жить можно. В дальнейшем, если найду другое решение, дополню статью
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот