Имя: Пароль:
1C
 
DOM: Узел.ПолучитьАтрибут("m:type") возвращает НЕОПРЕДЕЛЕНО, хотя атрибут есть
0 dave2000
 
22.04.15
17:54
Вобщем, есть строка СтрокаXML такого вида (упростил для примера):


<GetVehicle xmlns:fix="h_t_t_p://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="h_t_t_p://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<element m:type="ArgoAgricultureDatabaseModel.VehicleWayBills_Result">
   <PerfTskId1 m:type="Edm.Int32">123456</PerfTskId>
   <PerfTskId2 m:type="Edm.Decimal">123456</PerfTskId>
   <PerfTskId3 m:type="Edm.Boolean">123456</PerfTskId>
   <PerfTskId4 m:type="Edm.Int32">123456</PerfTskId>
</element>
</GetVehicle>


А это код для разбора этой строки:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Разыменовыватель = Новый РазыменовательПространствИменDOM(ДокументDOM);
Результат = ДокументDOM.ВычислитьВыражениеXPath("content/m:properties", ДокументDOM, Разыменовыватель);

//Обработка полученного ответа
УзелСтрока = Результат.ПолучитьСледующий();
Пока УзелСтрока=Неопределено Цикл
    
    Для каждого узелПоля Из УзелСтрока.ДочерниеУзлы Цикл

        //так мы получаем значение Нопределено, т.е. по имени почему-то не находит
        ТипЗначенияСтр = узелПоля.ПолучитьАтрибут("m:type");

        // А вот так, перебором атрибудов, работает нормально
        ТипЗначенияСтр = Неопределено;
        Для каждого Атр Из узелПоля.Атрибуты Цикл
            Если Атр.Имя = "m:type" Тогда
                ТипЗначенияСтр = Атр.Значение;
                Прервать;
            КонецЕсли;
        КонецЦикла;

        // ...
        // ...
        // ...

    КонецЦикла;

    УзелСтрока = Результат.ПолучитьСледующий();
КонецЦикла;



Итак, вопрос:

почему не работает строка узелПоля.ПолучитьАтрибут("m:type")? Почему она возвращает НЕОПРЕДЕЛЕНО?
1 dave2000
 
22.04.15
17:58
Опечатка, для вычисления Path там эта строка:

> Результат = ДокументDOM.ВычислитьВыражениеXPath("//element", ДокументDOM, Разыменовыватель);


Вопрос актуален.
2 Гёдза
 
22.04.15
18:30
а просто type?
3 dave2000
 
22.04.15
19:12
(2) узел.ПолучитьАтрибут("type") тоже возвращает НЕОПРЕДЕЛЕНО
4 DrShad
 
22.04.15
20:22
Ты код точно перепечатка? Ибо он нерабочий
5 Записьдампа
 
22.04.15
21:02
(0) Потому что ПолучитьАтрибут не умеет в квалифицированные имена. Он может или в локальные с пустым пространством - см. СП, первый вариант синтаксиса, или в раздельное указание пространства и имени - см. там же второй вариант.

Используй УзелПоля.ПолучитьАтрибут(УзелПоля.НайтиURIПространстваИмен("m"), "type")
6 dave2000
 
23.04.15
12:02
(5) Супер! Работает!)

Всем спасибо!
7 dave2000
 
23.04.15
12:03
Подозревал, что проблема скорее всего связана с пространством имен, не мог понять как именно