|
ЧтениеXML как правильно обходить |
☑ |
0
seraf
30.10.20
✎
04:29
|
Привет, есть у меня хмл-строка, вот её кусок для примера
<d7p1:Property name="Характеристика">
<d7p1:Value xmlns:d12p1="; xsi:type="d11p1:EnumRef.ВидыДеятельности">Частная</d7p1:Value>
</d7p1:Property>
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаХМЛ);
Пока ЧтениеXML.Прочитать() Цикл
//
КонецЦикла;
Вопрос, почему обходя её так я у ЧтениеXML не вижу "Характеристика", просто
ЧтениеXML.ТипУзла - Начало элемента
ЧтениеXML.Имя - d7p1:Property
ЧтениеXML.Префикс - d7p1
А у меня этих d7p1 куча, как мне понять что я считываю данные нужного мне узла. Или как к нему непосредственно перейти, ЧтениеXML.ПолучитьАтрибут("Характеристика") не работает.
То есть понятно, идут итерации d7p1:Property, d7p1:Value, #text и там моё значение "Частная", но где я в принципе нахожусь в файле не понимаю из свойств ЧтениеXML
|
|
1
hhhh
30.10.20
✎
04:36
|
(0) попробуй через DOM
|
|
2
Fram
30.10.20
✎
04:45
|
(0) ЧтениеXML.ПолучитьАтрибут("Характеристика")
Характеристика это значение атрибута. А имя атрибута в данном случае - name
|
|
3
seraf
30.10.20
✎
04:49
|
(2) чтениеXML в этом месте вообще опускает name="Характеристика", вижу только начало d7p1:Property
(1)смотрю DOM
|
|
4
seraf
30.10.20
✎
04:55
|
а как его использовать, так не находит
л_ПостроительДОМ = Новый ПостроительDOM;
л_ДОМДокумент = л_ПостроительДОМ.Прочитать(ЧтениеXML);
л_СписокУзловДокумент = л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property name="Характеристика""");
Для каждого л_УзелДокумент Из л_СписокУзловДокумент Цикл
Сообщить("1");
КонецЦикла;
|
|
5
youalex
30.10.20
✎
05:03
|
подозрительно похоже на Структуру
А если так попробовать:
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(СтрокаXML);
Значение = СериализаторXDTO.ПрочитатьXML(Чтение);
(4)
- name="Характеристика"" это атрибут, попробуй л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property");
В 1С, емнип, какой то баг был с неймспейсами еще (это про "d7p1:"), но возможно, только для XPATH
|
|
6
seraf
30.10.20
✎
05:17
|
(5) л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property") я по этому не могу искать, так как таких в файле много, нужен конкретный Характеристика
|
|
7
youalex
30.10.20
✎
06:18
|
Вообще для такого есть
ДокументDOM (DOMDocument)
ВычислитьВыражениеXPath (EvaluateXPathExpression)
Но как оно работает (если работает) с пространствами имен, я не понимаю.
Если ты выпилишь из своего текста все эти "d7p1:" и "xmlns=..." - можно его использовать.
еще есть Microsoft.XMLDOM c методом selectNodes().
еще ms sql умеет разбирать xml (удобно, заливаешь xml и дальше работаешь с ним через запросы sql)
|
|
8
rozer76
30.10.20
✎
13:08
|
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший