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