Имя: Пароль:
1C
1С v8
Разбор простого 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.Текст и ФлагНайдено Тогда
            ПутьКХмлЗапрос = ЧтениеСписка.Значение;
            ФлагНайдено = Ложь;
        КонецЕсли;
    КонецЦикла;