|
Парсинг XML отсутствие открытого тега | ☑ | ||
---|---|---|---|---|
0
MAPATNK2
naïve
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/> |
|||
2
MAPATNK2
naïve
19.03.18
✎
16:00
|
(1) да, прошу прощения, так
|
|||
3
Ник080808
19.03.18
✎
16:01
|
(0) xdto
|
|||
4
Вафель
19.03.18
✎
16:01
|
И в чем проблема? Это так и должно быть.
Если файлы не большие - делай через фабрику |
|||
5
MAPATNK2
naïve
19.03.18
✎
16:01
|
(2) Черт, тормознул. Спасибо, поробую какой-нибудь поиск придумать
|
|||
6
Сияющий в темноте
19.03.18
✎
19:56
|
Мы читаем тег из файла,если слеша в нем нет,то это открытие тага,если слеш стоит в начале,то это закрытие тага,а если слеш в конце,то этл самозакрывающийся таг,в этом случае,парсер предполагает,что он встретил сразу и открытие и закрытие
|
|||
7
mistеr
19.03.18
✎
21:26
|
(0) А что побудило писать собственный XML парсер?
Я в принципе не осуждаю, просто любопытно. |
|||
8
MAPATNK2
naïve
20.03.18
✎
07:44
|
(7) бесплатных, универсальных парсеров на просторе интернета, к сожалению, не нашел.
|
|||
9
d4rkmesa
20.03.18
✎
08:19
|
(8) Речь вообще об 1С? Зачем изобретать велосипед? Не в вашу сторону, но неимоверно раздражает. Понапишут свои парсеры, а потом суются со своими абсурдными требованиями, видите ли выгруженный через XDTO не нравится, то пустые тэги, то пространство имен пустое должно быть, то еще какая дребедень.
|
|||
10
Genayo
20.03.18
✎
09:04
|
(9) Вот иногда из сторонних систем типа аксапты или еще чего похуже такие xml приходят, что через XDTO нормально не прочитать...
|
|||
11
Serg_1960
20.03.18
✎
09:09
|
(9) Не спеши осуждать, не обладая всей информацией.
Иногда, когда приходится искать ошибки в сообщениях обмена (например, из не 1С-базы; например, очень большого размера с изменениями конфигурации внутри), то легче написать свой парсер, чем искать бесплатные парсеры файлов XML. Искать, находить и убеждаться что они тебе не подходят. |
|||
12
MAPATNK2
naïve
20.03.18
✎
09:45
|
(9) Пришли данные с сайта, которые были занесены туда руками в течение нескольких лет. XDTO пользоваться не умею. Пришел запрос, загрузить всю эту неструктурированную хрень в 1с базу. Вот и сижу мучаюсь. ТО тут, то там ошибка. Уже 2 день.
|
|||
13
Рэдрик Шухарт
20.03.18
✎
09:52
|
(12)А ЧтениеXML не устраивает по религиозным причинам или как?
|
|||
14
Cyberhawk
20.03.18
✎
10:07
|
Можно преобразовать ХМЛ-строку к каноничечкому виду
|
|||
15
Cyberhawk
20.03.18
✎
10:08
|
(12) А ты там кем?
|
|||
16
MAPATNK2
naïve
20.03.18
✎
12:11
|
(13) "Чтение XML " как раз этим и пользуюсь.
|
|||
17
MAPATNK2
naïve
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 |
|||
18
Serg_1960
20.03.18
✎
13:43
|
(17) Озвучивая неполную информацию, Вы рискуете получить недостоверный ответ :( Из алгоритма не совсем (а точнее -
совсем) непонятно как Вы формируете полный путь и не исключено, что ошибка кроется именно там. Вот ссылка, где указано всё весьма подробно: http://catalog.mista.ru/public/311011/ |
|||
19
MAPATNK2
naïve
20.03.18
✎
14:15
|
(18) Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |