|
Чтение атрибутов XML файла, у которых нет имени | ☑ | ||
---|---|---|---|---|
0
ac13
27.04.17
✎
13:54
|
Как прочитать атрибуты XML файлов, если у атрибутов нет имени, например так:
<offer id="20" available="true"> <url>Адрес_ссылки</url> <price>900</price> <picture>Ссылка_на_картинку</picture> <name>Название_товара</name> <param name="Цвет">Зеленый</param> <param name="Вес" unit="Кг">3</param> </offer> То есть например атрибуты с названием, ценой и ссылкой на картинку без имени. |
|||
1
ac13
27.04.17
✎
13:56
|
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если Атрибут = "Цвет" Тогда Объект.Цвет = ЧтениеXML.Значение; КонецЕсли; А как быть с ценой и названием? |
|||
2
бомболюк
27.04.17
✎
14:19
|
это зовется "элементы", а не "атрибуты без названия"
|
|||
3
ac13
27.04.17
✎
14:23
|
(2) спасибо :D
|
|||
4
ac13
27.04.17
✎
14:24
|
как прочитать элементы?
|
|||
5
бомболюк
27.04.17
✎
14:29
|
как нить так
Если (ЧтениеXML.Имя = "price") И (ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента) тогда Если ЧтениеXML.Прочитать() тогда Сообщить(ЧтениеXML.Значение); КонецЕсли; КонецЕсли; |
|||
6
ac13
27.04.17
✎
14:29
|
Чтение.ПолучитьАтрибут("price")
так? |
|||
7
бомболюк
27.04.17
✎
14:29
|
а ваще нада юзать XPath
|
|||
8
ac13
27.04.17
✎
14:29
|
(5) спасибо. сейчас как-нибудь попробую
|
|||
9
Вафель
27.04.17
✎
14:30
|
(7) может лучше XDTO стразу?
|
|||
10
бомболюк
27.04.17
✎
14:32
|
(9) я не против ;-)
|
|||
11
ac13
27.04.17
✎
14:34
|
(5) спасибо
ЧтениеXML.Имя = "price" Да!) |
|||
12
ac13
05.05.17
✎
11:29
|
<offer id="20" available="true">
<url>Адрес_ссылки</url> <price>900</price> <picture>Ссылка_на_картинку</picture> <name>Название_товара</name> <param name="Цвет">Зеленый</param> <param name="Вес" unit="Кг">3</param> </offer> ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПутьКФайлу); А = 0; Пока ЧтениеXML.Прочитать() Цикл Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = ЧтениеXML.Имя; Если СокрЛП(ИмяУзла) = "offer" Тогда А = 1; НС = ТЧ.Добавить(); КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда Если ИмяУзла = "price" И А = 1 Тогда НС.Цена = ЧтениеXML.Значение; КонецЕсли; Если ИмяУзла = "name" И А = 1 Тогда НС.Название = ЧтениеXML.Значение; КонецЕсли; ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда А = 0; КонецЕсли; КонецЦикла; |
|||
13
ac13
05.05.17
✎
11:30
|
А мне еще надо получить значение offer id="20"
то есть значение "20" как мне его получить? |
|||
14
ac13
05.05.17
✎
11:53
|
Вот таким образом читает не offer id="20", а читает available="true"
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = ЧтениеXML.Имя; Если СокрЛП(ИмяУзла) = "offer" Тогда А = 1; НС = ТЧ.Добавить(); Пока ЧтениеXML.ПрочитатьАтрибут() Цикл НС.ID = ЧтениеXML.Значение; КонецКикла; КонецЕсли; |
|||
15
ac13
05.05.17
✎
11:54
|
и в таком случае оно читает только атрибуты и не переходит к чтению текста. Т.е. остальные колонки пустые, то ID заполняет
|
|||
16
ac13
05.05.17
✎
12:47
|
получилось так:
ИмяУзла = ЧтениеXML.Имя; Если ИмяУзла = "offers" Тогда Ид = 1; КонецЕсли; Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Если Ид = 1 И ЧтениеXML.Имя = "id" Тогда А = 1; НС = ТЧ.Добавить(); НС.ID = ЧтениеXML.Значение; КонецЕсли; КонецЦикла; |
|||
17
Fragster
гуру
05.05.17
✎
12:49
|
правильно будет потребовать (или сгенерировать/написать руками) схему для этого файла, и разбирать с помощью механизма XDTO.
|
|||
18
Fragster
гуру
05.05.17
✎
12:50
|
а эти стейт машины для чтения, они, конечно, несложные поначалу, но очень быстро превращаются в говнокод.
|
|||
19
ac13
05.05.17
✎
13:32
|
(17) для файла ничего не могу получить. есть ссылка на него и всё
|
|||
20
Fragster
гуру
05.05.17
✎
14:42
|
(19) ну тогда сделай схему сам, либо с помощью создания пакета XDTO в конфе, либо с помощью внешних инструментов (например XMLpad), там надо будет сделать указание типа для значений, где это возможно + максимальное и минимальное количество элементов в файле (для того, чтобы правильно парсер правильно разделил списоки XDTO и объекты/значения XDTO)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |