Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Парсинг XML отсутствие открытого тега

Парсинг XML отсутствие открытого тега
Я
   MAPATNK2
 
19.03.18 - 15:58
Добрый день. Есть XML файлик в виде:

<part id="9" sclad="1" price="11485" old_price="0">
<name>
AVR CG2600 - электронный блок управления двигателем и напряжением
</name>
<img>m009.jpg</img>
<art>00000000267</art>
<desc>
Автоматический регулятор напряжения CG2600, AC Module Unit 30-22TC
</desc>
<groups>
<group parent="18">716</group>
</groups>
</part>


Всё вроде бы ничего, но в некоторых строках данного файла имеются пустые значения и вместо 
<img> </img> данного метода отображения пустых значений в файле используется 
</img> просто закрытие тега.
Парсинг с помощью стека имен, т.е. открывается тег - записывается в стек, закрывается тег, удаляется из стека. А тут получается, что закрывающий тег удаляет другие теги. Как то можно это победить? Может есть какой-то универсальный метод парсинга XML файла, который будет знать что неоткрытый тег </img> - это пустое значение?
 
 
   Вафель
 
1 - 19.03.18 - 15:59
Вот так должно быть
<img/>
   MAPATNK2
 
2 - 19.03.18 - 16:00
(1) да, прошу прощения, так
   Ник080808
 
3 - 19.03.18 - 16:01
(0) xdto
   Вафель
 
4 - 19.03.18 - 16:01
И в чем проблема? Это так и должно быть.
Если файлы не большие - делай через фабрику
   MAPATNK2
 
5 - 19.03.18 - 16:01
(2) Черт, тормознул. Спасибо, поробую какой-нибудь поиск придумать
   Сияющий в темноте
 
6 - 19.03.18 - 19:56
Мы читаем тег из файла,если слеша в нем нет,то это открытие тага,если слеш стоит в начале,то это закрытие тага,а если слеш в конце,то этл самозакрывающийся таг,в этом случае,парсер предполагает,что он встретил сразу и открытие и закрытие
   mistеr
 
7 - 19.03.18 - 21:26
(0) А что побудило писать собственный XML парсер?

Я в принципе не осуждаю, просто любопытно.
   MAPATNK2
 
8 - 20.03.18 - 07:44
(7) бесплатных, универсальных парсеров на просторе интернета, к сожалению, не нашел.
   d4rkmesa
 
9 - 20.03.18 - 08:19
(8) Речь вообще об 1С? Зачем изобретать велосипед? Не в вашу сторону, но неимоверно раздражает. Понапишут свои парсеры, а потом суются со своими абсурдными требованиями, видите ли выгруженный через XDTO не нравится, то пустые тэги, то пространство имен пустое должно быть, то еще какая дребедень.
   Genayo
 
10 - 20.03.18 - 09:04
(9) Вот иногда из сторонних систем типа аксапты или еще чего похуже такие xml приходят, что через XDTO нормально не прочитать...
 
 Рекламное место пустует
   Serg_1960
 
11 - 20.03.18 - 09:09
(9) Не спеши осуждать, не обладая всей информацией.

Иногда, когда приходится искать ошибки в сообщениях обмена (например, из не 1С-базы; например, очень большого размера с изменениями конфигурации внутри), то легче написать свой парсер, чем искать бесплатные парсеры файлов XML. Искать, находить и убеждаться что они тебе не подходят.
   MAPATNK2
 
12 - 20.03.18 - 09:45
(9) Пришли данные с сайта, которые были занесены туда руками в течение нескольких лет. XDTO пользоваться не умею. Пришел запрос, загрузить всю эту неструктурированную хрень в 1с базу. Вот и сижу мучаюсь. ТО тут, то там ошибка. Уже 2 день.
   Рэдрик Шухарт
 
13 - 20.03.18 - 09:52
(12)А ЧтениеXML  не устраивает по религиозным причинам или как?
   Cyberhawk
 
14 - 20.03.18 - 10:07
Можно преобразовать ХМЛ-строку к каноничечкому виду
   Cyberhawk
 
15 - 20.03.18 - 10:08
(12) А ты там кем?
   MAPATNK2
 
16 - 20.03.18 - 12:11
(13) "Чтение XML " как раз этим и пользуюсь.
   MAPATNK2
 
17 - 20.03.18 - 12:14
(13)
Парсер = Новый ЧтениеXML;
    Парсер.ОткрытьФайл(ВыбратьФайл);
    
    СтекИмен = Новый СписокЗначений;
    
    ТЗгр.Очистить();
    ТЗпарт.Очистить();
    
    Пока Парсер.Прочитать() Цикл
        Если Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            СтекИмен.Добавить(Парсер.Имя);
            ПолныйПуть = ПостроитьПуть(СтекИмен);
            
            Если ПолныйПуть = "/section/groups/group" Тогда
                
                //Парсер.Прочитать();

                
                //Если Парсер.ТипУзла = ТипУзлаXML.Текст Тогда

                
                Группа=ЭтаФОрма.ТЗгр.Добавить();
                Группа.id=Парсер.ЗначениеАтрибута("id");
                Группа.show=Парсер.ЗначениеАтрибута("show");
                Группа.parent=Парсер.ЗначениеАтрибута("parent");
                Парсер.Прочитать();
                Группа.Наименование=Парсер.Значение;

Это участок кода.
Проблема в том, что условие 
Если ПолныйПуть = "/section/groups/group" Тогда

не отрабатывает. При отладке, получая значения "ПолныйПуть " выводится левая инфа. Не /section/groups/group а /section/group либо /section/groups/ и в зависимости какое условие ты ставишь, именно такой путь не будет прописываться в реквизите "ПолныйПуть ". Чудеса, да и только. XML уходит от условия XD
   Serg_1960
 
18 - 20.03.18 - 13:43
(17) Озвучивая неполную информацию, Вы рискуете получить недостоверный ответ :( Из алгоритма не совсем (а точнее -
совсем) непонятно как Вы формируете полный путь и не исключено, что ошибка кроется именно там.

Вот ссылка, где указано всё весьма подробно:
http://catalog.mista.ru/public/311011/
   MAPATNK2
 
19 - 20.03.18 - 14:15
(18) Спасибо.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует