|   |   | 
| 
 | 8.2 УФ Чтение данных из xml файла | ☑ | ||
|---|---|---|---|---|
| 0
    
        Кукалёв Анатолий 21.03.12✎ 04:25 | 
        Сервер возвращает данные вида:
  <?xml version="1.0" encoding="UTF-8"?> <request> <message id="1">ТекстСообщения</message> <message id="2">Ошибка</message> <message id="3">ТекстСообщения</message> ... </request> 1) Как проверить, что имеется блок "request" ? 2) При положительном ответе на 1) как пройтись по всем блокам "message" получив значение "id" и "ТекстСообщения" ? | |||
| 1
    
        0xFFFFFF 21.03.12✎ 06:57 | 
        ЧтениеХМЛ = Новый ЧтениеXML;
  ЧтениеХМЛ.ОткрытьФайл(ИмяФайла); Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если (ЧтениеХМЛ.Имя = "request") Тогда Пока ЧтениеХМЛ.Прочитать() Цикл Если (ЧтениеХМЛ.Имя = "message") Тогда id = ЧтениеХМЛ.ПолучитьАтрибут("id"); КонецЕсли; Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.КонецЭлементаТогда Прервать;//закончился узел с данными документа КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Как то так | |||
| 2
    
        0xFFFFFF 21.03.12✎ 06:59 | 
        Ну а для "ТекстСообщения", "Ошибка" - нужно вроде юзать 
  ЧтениеХМЛ.Значение Для соответствующего элемента | |||
| 3
    
        Кукалёв Анатолий 21.03.12✎ 13:50 | 
        ЧтениеХМЛ    = Новый ЧтениеXML;
  ЧтениеХМЛ.ОткрытьФайл(ИмяФайла); Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если ЧтениеХМЛ.Имя = "request" Тогда Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.Имя = "message" И ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда mid = ЧтениеХМЛ.ПолучитьАтрибут("id"); mtxt = ЧтениеХМЛ.Значение; ДокТест.ДобавитьСтроку("id:"+mid+", txt:"+mtxt+"."); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; mid - все получает, а вот mtxt - всегда пустое значение. Что не так ? | |||
| 4
    
        GenV 21.03.12✎ 14:04 | 
        (3) Что бы прочитать значение нужно добавить еще внутренний цикл с Прочитать() (завершение по получение конца элемента "request") и сравнением ЧтениеХМЛ.ТипУзла = ТипУзлаXML.Текст, тогда можно получать значение     | |||
| 5
    
        GenV 21.03.12✎ 14:10 | 
        4+ можно и проще, если использовать ПрочитатьXML(ЧтениеХМЛ, Тип("Строка"))     | |||
| 6
    
        Кукалёв Анатолий 21.03.12✎ 14:27 | 
        Сделал так, все получает даже если сообщение пустое:
  ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл(ИмяФайла); Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если ЧтениеХМЛ.Имя = "request" Тогда Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.Имя = "message" И ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда mid = ЧтениеХМЛ.ПолучитьАтрибут("id"); ЧтениеХМЛ.Прочитать(); mtxt = ЧтениеХМЛ.Значение; ДокТест.ДобавитьСтроку("id:"+mid+", txt:"+mtxt+"."); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; | |||
| 7
    
        Кукалёв Анатолий 21.03.12✎ 14:27 | 
        Спасибо всем     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |