![]() |
|
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
|
Подозревал, что проблема скорее всего связана с пространством имен, не мог понять как именно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |