|
Создаю XML, а он парсится сторонней программой | ☑ | ||
---|---|---|---|---|
0
DES
09.06.16
✎
15:23
|
Подозреваю потому что 1С8.3.7 генерирует такую конструкцию
<DUMMY/> Вместо <DUMMY></DUMMY> Можно ли заставить 1с8 не сокращать конструкции XML ? |
|||
1
mehfk
09.06.16
✎
15:23
|
Новый ЗаписьТекста;
|
|||
2
Зая Бусечка
09.06.16
✎
15:23
|
Это совершенно корректная запись.
Вправляй мозги сторонней программе. |
|||
3
DES
09.06.16
✎
15:51
|
или писать анализатор текста с корректировкой ?
|
|||
4
Fragster
гуру
09.06.16
✎
16:23
|
то-ли через параметрызаписиXML, то ли через параметрыDOM когда-то давно это делал. почему-то не могу найти.
Но вообще (2) прав |
|||
5
DES
09.06.16
✎
22:28
|
(4) я не могу дизассемблировать сайт госслужбы.
|
|||
6
DES
09.06.16
✎
22:29
|
сделал, примочку
Процедура КоррекцияXML(ИмяФайла) Экспорт Перем Текст, Номер, Стр, Сч; Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла, КодировкаТекста.UTF8); Для Номер=1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(Номер); Если СтрЧислоВхождений(Стр, "/>")>0 Тогда Стр = СтрЗаменить(Стр,"/>", "¤"); МассивТэгов = СтрРазделить(Стр, "¤", Ложь); Для Сч=0 по МассивТэгов.ВГраница() Цикл Если СтрНайти(МассивТэгов[Сч], """")=0 Тогда Тэг = Сред(МассивТэгов[Сч], СтрНайти(МассивТэгов[Сч], "<", НаправлениеПоиска.СКонца)+1); Если НЕ СтрНачинаетсяС(Тэг, "/") Тогда МассивТэгов[Сч] = МассивТэгов[Сч] + "></" + Тэг + ">"; КонецЕсли; Иначе МассивТэгов[Сч] = МассивТэгов[Сч] + "/>"; КонецЕсли; КонецЦикла; Стр = СтрСоединить(МассивТэгов, ""); Текст.ЗаменитьСтроку(Номер, Стр); КонецЕсли; КонецЦикла; Текст.Записать(ИмяФайла, КодировкаТекста.UTF8); КонецПроцедуры |
|||
7
Cyberhawk
09.06.16
✎
22:31
|
Это валидная запись и вшита в платформу. Только пост-обработкой текстового документа
|
|||
8
Cyberhawk
09.06.16
✎
22:32
|
||||
9
Armando
09.06.16
✎
23:01
|
Вместо объекта ЗаписьXML используй КаноническаяЗаписьXML
|
|||
10
Armando
09.06.16
✎
23:02
|
ЗаписьXML = Новый КаноническаяЗаписьXML;
ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("Тест"); ЗаписьXML.ЗаписатьКонецЭлемента(); ТекстXML = ЗаписьXML.Закрыть(); Сообщить(ТекстXML); Покажет <Тест></Тест> |
|||
11
Armando
09.06.16
✎
23:17
|
Кстати здесь https://www.w3.org/TR/xml-c14n#Terminology так и написано:
Empty elements are converted to start-end tag pairs |
|||
12
DES
10.06.16
✎
12:13
|
Оказывается не в этом дело было, а в том что
если пишу ЗаписьXML.ОткрытьФайл(ИмяФайла); то 1С8 лепит в начало файла 3 байта каких то символов , которых даже в Notepad++ не видно. Из-за этого файл и не загружается. А если пишу ЗаписьXML.ОткрытьФайл(ИмяФайла,"windows-1251"); то все нормально, но коды символов текста преобразуются в не читаемые, но и файл загружается. И 1с8 не лепит 3 непонятных символа в начало файла. |
|||
13
Зая Бусечка
10.06.16
✎
12:14
|
(12) Эти три байта - признак уникода.
|
|||
14
mehfk
10.06.16
✎
12:16
|
||||
15
Fragster
гуру
10.06.16
✎
12:20
|
есть мнение, что внешняя программа - ацтой
|
|||
16
Fragster
гуру
10.06.16
✎
12:21
|
ну пиши в строку, а затем через запись текста (правда, емнип, там BOM все равное будет, если кодировка utf)
|
|||
17
Pistol
10.06.16
✎
12:24
|
(16) Для кириллицы UTF-8 без BOM называется CESU-8
Ну или старый, добрый трюк - дописать к пустому файлу |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |