Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Разбор простого XML

Разбор простого XML
Я
   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ЗапросШК + " нашли"); 
  //я его успешно нахожу, а вот как взять значение его текста

         КонецЕсли;
       КонецЦикла;
      КонецЕсли;
  КонецЦикла;
 
 
   NorthWind
 
1 - 18.09.16 - 10:23
егаист - это хорошо. Такого названия я еще не слышал :))
Ну например можно попробовать примерно так:

Если ЧтениеСписка.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ФлагНайдено = Ложь;     
Пока ЧтениеСписка.ПрочитатьАтрибут() Цикл
         Если IDЗапросШК = ЧтениеСписка.Значение Тогда
             ФлагНайдено = Истина;
Прервать;
         КонецЕсли;
       КонецЦикла;

Если ЧтениеСписка.ТипУзла = ТипУзлаXML.КонецЭлемента и ФлагНайдено Тогда
Сообщить (ЧтениеСписка.Значение);
КонецЕсли;
   NorthWind
 
2 - 18.09.16 - 10:26
Прервать () зря поставил, все атрибуты нужно будет прочитать до конца.
   NorthWind
 
3 - 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]
   kisobol
 
4 - 18.09.16 - 10:48
Спасибо.
Вот так закостылил егаиста
ФлагНайдено = Ложь;    
    Пока ЧтениеСписка.Прочитать() Цикл
        Если ЧтениеСписка.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Пока ЧтениеСписка.ПрочитатьАтрибут() Цикл
                Если IDЗапросШК = ЧтениеСписка.Значение Тогда
                    ФлагНайдено = Истина;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        Если ЧтениеСписка.ТипУзла = ТипУзлаXML.Текст и ФлагНайдено Тогда
            ПутьКХмлЗапрос = ЧтениеСписка.Значение;
            ФлагНайдено = Ложь;
        КонецЕсли;
    КонецЦикла;

Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует