![]() |
|
Разбор простого 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.Текст и ФлагНайдено Тогда ПутьКХмлЗапрос = ЧтениеСписка.Значение; ФлагНайдено = Ложь; КонецЕсли; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |