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

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 человек.
Рекламное место пустует