|
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
|
Подозревал, что проблема скорее всего связана с пространством имен, не мог понять как именно
|
|