Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ЧтениеXML как правильно обходить

ЧтениеXML как правильно обходить
Я
   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
   hhhh
 
1 - 30.10.20 - 04:36
(0) попробуй через DOM
   Fram
 
2 - 30.10.20 - 04:45
(0) ЧтениеXML.ПолучитьАтрибут("Характеристика")

Характеристика это значение атрибута. А имя атрибута в данном случае - name
   seraf
 
3 - 30.10.20 - 04:49
(2) чтениеXML в этом месте вообще опускает name="Характеристика", вижу только начало d7p1:Property
(1)смотрю DOM
   seraf
 
4 - 30.10.20 - 04:55
а как его использовать, так не находит

л_ПостроительДОМ     = Новый ПостроительDOM; 
л_ДОМДокумент        = л_ПостроительДОМ.Прочитать(ЧтениеXML);
    
л_СписокУзловДокумент = л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property name="Характеристика"""); 
Для каждого л_УзелДокумент Из л_СписокУзловДокумент Цикл 
Сообщить("1");
КонецЦикла;
   youalex
 
5 - 30.10.20 - 05:03
подозрительно похоже на Структуру

А если так попробовать:
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(СтрокаXML);
    Значение = СериализаторXDTO.ПрочитатьXML(Чтение);

(4) 
-  name="Характеристика"" это атрибут, попробуй л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property");
В 1С, емнип, какой то баг был с неймспейсами еще (это про "d7p1:"), но возможно, только для XPATH
   seraf
 
6 - 30.10.20 - 05:17
(5) л_ДОМДокумент.ПолучитьЭлементыПоИмени("d7p1:Property") я по этому не могу искать, так как таких в файле много, нужен конкретный Характеристика
   youalex
 
7 - 30.10.20 - 06:18
Вообще для такого есть
ДокументDOM (DOMDocument)
ВычислитьВыражениеXPath (EvaluateXPathExpression)

Но как оно работает (если работает) с пространствами имен, я не понимаю.
Если ты выпилишь из своего текста все эти "d7p1:" и  "xmlns=..." - можно его использовать.

еще есть Microsoft.XMLDOM c методом selectNodes().
еще ms sql умеет разбирать xml (удобно, заливаешь xml и дальше работаешь с ним через запросы sql)
   rozer76
 
8 - 30.10.20 - 13:08

Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.