|
Разбор XML не стандартного типа. | ☑ | ||
---|---|---|---|---|
0
flafla
22.03.18
✎
08:39
|
Есть XML вот такого вида
<?xml version="1.0" encoding="UTF-8"?> <NewRequest> <Date>2018-03-21T16:02:49</Date> <Number>75</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> <NewRequest> <Date>2018-03-21T16:10:24</Date> <Number>76</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> <NewRequest> <Date>2018-03-21T16:11:16</Date> <Number>77</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> <NewRequest> <Date>2018-03-21T16:11:33</Date> <Number>78</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> <NewRequest> <Date>2018-03-21T16:12:15</Date> <Number>79</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> <NewRequest> <Date>2018-03-21T16:12:39</Date> <Number>80</Number> <Addr Town="Оренбург" Street="Гагарина Проспект" House="1" Flat="1" /> <RequestDate>2018-03-30T12:00:00</RequestDate> <PhNumber>74564564564</PhNumber> <Customer>тест</Customer> <Comments>тест</Comments> </NewRequest> Я понимаю, что открывающих - закрывающих тегов нет. Но так загружается с сайта. ЧтениеXML() вываливается с ошибкой и ругается на конец файла. я так понимаю, проблема в том что он не может определить закрывающий тег верно? можно ли как то заставить его читать от тега к тегу? Спасибо. |
|||
1
flafla
22.03.18
✎
08:41
|
Стандартный код загрузки выглядит вот так:
Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл("C:\111233\webto1c.xml"); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя = "NewRequest" Тогда НовыйДокумент = Документы.cleanЗаказССайта.СоздатьДокумент(); НовыйДокумент.Дата = ТекущаяДата(); Адрес = Новый Структура; стр = Новый Структура; КонецЕсли; Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; // Атрибуты элементов можно читать только если текущая часть - // начало элемента Пока Чтение.ПрочитатьАтрибут() Цикл // Прочитать данные узла атрибута. ТипУзла = Чтение.ТипУзла; Сообщить (ТипУзла); Имя = Чтение.Имя; Сообщить(Имя); Значение = Чтение.Значение; Сообщить(Значение); Адрес.Вставить(Имя,Значение); Сообщить (Адрес); // Обработать полученные значения. КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда Если ИмяУзла = "Date" Тогда НовыйДокумент.ДатаССайта = XMLЗначение(Тип("Дата"),Чтение.Значение); Сообщить(Чтение.Значение); ИначеЕсли ИмяУзла = "Number" Тогда Новыйдокумент.НомерЗаказа = Чтение.Значение; Сообщить(Чтение.Значение); ИначеЕсли ИмяУзла = "Addr" Тогда НовыйДокумент.Адрес = Адрес.Town + " " + Адрес.Street + " " + Адрес.House + " " + Адрес.flat; Сообщить(Адрес.Town + " " + Адрес.Street + " " + Адрес.House + " " + Адрес.flat); ИначеЕсли ИмяУзла = "RequestDate" Тогда Новыйдокумент.ДатаВыезда = XMLЗначение(Тип("Дата"),Чтение.Значение); Сообщить(Чтение.Значение); ИначеЕсли ИмяУзла = "PhNumber" Тогда НовыйДокумент.НомерТелефона = Прав(Чтение.Значение,СтрДлина(Чтение.Значение)-1); Сообщить(Чтение.Значение); //стр.Вставить("НомерТелефона", Прав(Чтение.Значение,СтрДлина(Чтение.Значение)-1)); ИначеЕсли ИмяУзла = "Customer" Тогда НовыйДокумент.Клиент = Чтение.Значение; Сообщить(Чтение.Значение); //ПолучитьКлиентаПоНомеруТелефона(стр.НомерТелефона, Чтение.Значение); ИначеЕсли ИмяУзла = "Comments" Тогда НовыйДокумент.Комментарий = Чтение.Значение; Сообщить(Чтение.Значение); //Сообщить("Текст:" + Чтение.Значение); КонецЕсли; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента И Чтение.Имя = "NewRequest" Тогда НовыйДокумент.Адрес = Адрес.Town + " " + Адрес.Street + " " + Адрес.House + " " + Адрес.flat; НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение); КонецЕсли; КонецЦикла; |
|||
2
Cool_Profi
22.03.18
✎
08:41
|
А добавить руками в конец закрывающий?
|
|||
3
flafla
22.03.18
✎
08:43
|
Выгрузка идет с сайта, каждый день добавлять руками закрывающий будет неудобно.
Вопрос в том, как можно обойти отсутствие этого закрывающего |
|||
4
flafla
22.03.18
✎
08:46
|
Даже наверное вопрос будет правильно указать так: можно ли ка кто программно все таки вычислить этот конец файла и перед обработкой писать туда закрывающий тег?
|
|||
5
YAGolova
22.03.18
✎
08:48
|
(4) читай как текст, добавляй нужную строку и сохраняй
|
|||
6
etc
22.03.18
✎
08:49
|
Ошибка данного XML в том что корневой тег должен быть один, а тут он повторяется. Соответственно xml парсер не может по тегу определить конец документа.
Можешь попробовать обхитрить парсер. Вставь второй строкой (после заголовка) <root> а в конце файла </root>. Тогда и парсер поймет твой файл. |
|||
7
flafla
22.03.18
✎
08:51
|
(5) Спасибо. я попробую.
|
|||
8
бомболюк
22.03.18
✎
09:02
|
а нельзя чтоль сайтоведа нагнуть чтоб нормальный XML отдавал а не всякую фигню?
|
|||
9
Сияющий в темноте
22.03.18
✎
09:04
|
И чего,парсер не может прочитать данный файл?
читаем следующий тег,если он есть,то обрабатываем нащ реквест до закрытия,если читать больше нечего,вот и кончился наш файлзачем еще огород городить? |
|||
10
flafla
22.03.18
✎
09:09
|
(9) не может, вываливается с ошибкой
{Документ.cleanЗаказССайта.Форма.ФормаСписка.Форма(36)}: Ошибка при вызове метода контекста (Прочитать) Пока Чтение.Прочитать() Цикл по причине: Ошибка разбора XML: - [12,2] Фатальная ошибка: Extra content at the end of the document SystemId: file://C:/111233/webto1c.xml |
|||
11
xxTANATORxx
22.03.18
✎
09:13
|
(8)+500
самый дельный совет |
|||
12
igork1966
22.03.18
✎
09:14
|
(9) Это не соответствует стандарту xml
https://ru.wikipedia.org/wiki/XML "Логическая структура Все составляющие части документа обобщаются в пролог и корневой элемент. Корневой элемент — обязательная часть документа, составляющая всю его суть (пролог, вообще говоря, может отсутствовать). Может включать (а может не включать) вложенные" |
|||
13
igork1966
22.03.18
✎
09:15
|
(0) Это не XML, а некий файл "по мотивам"
|
|||
14
Serg_1960
22.03.18
✎
10:28
|
(10) Ошибка не в структуре файла XML, а в алгоритме работы с ним.
Можно, как вариант чтение делать в попытке, а по исключению - анализ ошибки и нормальное завершение работы. Можно, как вариант, после чтения конца элемента "NewRequest" и записи документа - очищать "НовыйДокумент = Неопределено;" - это будет своеобразным "маркером" нормального завершения работы. |
|||
15
CountR
22.03.18
✎
10:53
|
Вы как не программисты )
В (5) и (6) даны дельные советы - добавляем корневой элемент, и задача сводится к уже решенной - разбор стандартного xml файла. |
|||
16
Radkt
22.03.18
✎
11:36
|
(0) как в (5) или просто читай как текст
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |