|   |   | 
| 
 | Разбор простого XML | ☑ | ||
|---|---|---|---|---|
| 0
    
        kisobol 18.09.16✎ 10:11 | 
        Друзья, есть вот такой XML, от егаиста
 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> - <A> <url replyId="81a37629-7d8a-408a-ba8e-7d8a1d0761ca">http://192.168.0.2:8080/opt/out/Ticket/1192</url> <url replyId="7111ebd3-dd1f-4ae1-9e6c-c00a7d0ceb3f">http://192.168.0.2:8080/opt/out/Ticket/1193</url> <url replyId="5d188007-5edf-4cdf-af34-c0b9a6eb94af">http://192.168.0.2:8080/opt/out/Ticket/1194</url> <url replyId="eafbdfaf-2e3c-41b3-84ae-f30241018174">http://192.168.0.2:8080/opt/out/Ticket/1195</url> <url replyId="7b5d5546-c574-4946-b8e0-ee6da891ff9d">http://192.168.0.2:8080/opt/out/Ticket/1196</url> <ver>1</ver> </A> Мне нужно например найти 5d188007-5edf-4cdf-af34-c0b9a6eb94af, если я нашел то взять его значение в тексте http://192.168.0.2:8080/opt/out/Ticket/1194 - сохранить в переменную. Код: ЧтениеСписка = Новый ЧтениеXML; ЧтениеСписка.ОткрытьФайл(РабочаяПапка + "spisok.xml"); Пока ЧтениеСписка.Прочитать() Цикл Если ЧтениеСписка.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеСписка.ПрочитатьАтрибут() Цикл Если IDЗапросШК = ЧтениеСписка.Значение Тогда Сообщить(IDЗапросШК + " нашли"); //я его успешно нахожу, а вот как взять значение его текста КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; | |||
| 1
    
        NorthWind 18.09.16✎ 10:23 | 
        егаист - это хорошо. Такого названия я еще не слышал :))
 Ну например можно попробовать примерно так: Если ЧтениеСписка.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ФлагНайдено = Ложь; Пока ЧтениеСписка.ПрочитатьАтрибут() Цикл Если IDЗапросШК = ЧтениеСписка.Значение Тогда ФлагНайдено = Истина; Прервать; КонецЕсли; КонецЦикла; Если ЧтениеСписка.ТипУзла = ТипУзлаXML.КонецЭлемента и ФлагНайдено Тогда Сообщить (ЧтениеСписка.Значение); КонецЕсли; | |||
| 2
    
        NorthWind 18.09.16✎ 10:26 | 
        Прервать () зря поставил, все атрибуты нужно будет прочитать до конца.     | |||
| 3
    
        NorthWind 18.09.16✎ 10:45 | 
        Я бы сделал немножко по-другому
 [code] Функция АтрибутыВСтруктуру (ПотокXML) Структ = Новый Структура; Для Н = 0 По ПотокXML.КоличествоАтрибутов()-1 Цикл Структ.Вставить (ПотокXML.ИмяАтрибута(Н), ПотокXML.ЗначениеАтрибута(Н)); КонецЦикла; Возврат Структ; КонецФункции Пока ЧтениеXML.Прочитать () Цикл ИмяXML = ЧтениеXML.Имя; ЗначениеXML = ЧтениеXML.Значение; ЭтоНачалоУзла = (ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента); ЭтоКонецУзла = (ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента); Если (ИмяXML = "url") Тогда ОтветНайден = Ложь; Если ЭтоНачалоУзла Тогда Атрибуты = АтрибутыВСтруктуру (ЧтениеXML); Если Атрибуты ["replyID"] = IDЗапросШК Тогда ОтветНайден = Истина; КонецЕсли; КонецЕсли; Если ЭтоКонецУзла и ОтветНайден Тогда Сообщить (ЗначениеXML); КонецЕсли; КонецЕсли; КонецЦикла [/code] | |||
| 4
    
        kisobol 18.09.16✎ 10:48 | 
        Спасибо.
 Вот так закостылил егаиста ФлагНайдено = Ложь; Пока ЧтениеСписка.Прочитать() Цикл Если ЧтениеСписка.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеСписка.ПрочитатьАтрибут() Цикл Если IDЗапросШК = ЧтениеСписка.Значение Тогда ФлагНайдено = Истина; КонецЕсли; КонецЦикла; КонецЕсли; Если ЧтениеСписка.ТипУзла = ТипУзлаXML.Текст и ФлагНайдено Тогда ПутьКХмлЗапрос = ЧтениеСписка.Значение; ФлагНайдено = Ложь; КонецЕсли; КонецЦикла; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |