Имя: Пароль:
1C
1С v8
ЧтениеXML как правильно обходить
0 seraf
 
30.10.20
04:29
Привет, есть у меня хмл-строка, вот её кусок для примера

<d7p1:Property name="Характеристика">
<d7p1:Value xmlns:d12p1="http://v8.1c.ru/8.1/data/enterprise/current-config"; 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