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

ЧтениеXML - как прочитать только нужные узлы?

ЧтениеXML - как прочитать только нужные узлы?
Я
   RomaH
 
05.04.19 - 07:05
1С рекомендует читать не весь файл в объект XDTO, а постепенно

ок, в файле имеем список

<patients>
   <patient...    
   <patient...
   <patient...
   <patient...
   <patient...

как прочитать только узлы patient?

если Пропустить() - то не догоняю как его в цикле использовать

    Пока ЧтениеХМЛ.Прочитать() Цикл
        
        Если ЧтениеХМЛ.ЛокальноеИмя = "patient"    Тогда
            
             Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ,лТип);
            
            ЧтениеХМЛ.Пропустить();
            
        КонецЕсли;
        
    КонецЦикла;

так перескакивает через одного
 
 
   RomaH
 
1 - 05.04.19 - 07:18
ЧтениеХМЛ.Пропустить(); - встает на конец элемента patient

а Прочитать() сразу за пропустить - переходит на третий элемент списка пропуская второй - т.е. с конца первого на начало третьего
   RomaH
 
2 - 05.04.19 - 07:43
чем дальше в лес тем гуще партизаны

    Пока ЧтениеХМЛ.Прочитать() Цикл
        
        Если ЧтениеХМЛ.ЛокальноеИмя = "patient" И ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента    Тогда
            
             Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ,лТип);
            
            Сообщить(Данные.surname);
            
        КонецЕсли;
        
    КонецЦикла;

читает через одного 1 - 3 - 5 и так до конца
   RomaH
 
3 - 05.04.19 - 07:46
не понял
Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ,лТип);
делает с ЧтениеХМЛ тоже что и Прочитать()
   RomaH
 
4 - 05.04.19 - 07:54
как правильно написать тоже самое?
    ВсегоПациентов = 0;
    
    Пока ЧтениеХМЛ.Прочитать() Цикл
        
        Пока ЧтениеХМЛ.ЛокальноеИмя = "patient" И ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента    И ВсегоПациентов < 2000 Цикл
            
            ВсегоПациентов = ВсегоПациентов + 1;
             Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ,лТип);
            
            Сообщить(Данные.surname);
            
        КонецЦикла;
        
    КонецЦикла;
   RomaH
 
5 - 05.04.19 - 07:54
(4) этот код делает то что мне надо - создает объекты XDTO на для каждого элемента списка
   Cyberhawk
 
6 - 05.04.19 - 08:31
(4) от (2) ничем вроде не отличается. Походу у тебя кэш старого модуля обработки использовался, вот ты и подумал, что неправильно работает
   Василий Алибабаевич
 
7 - 05.04.19 - 09:01
(3) 100 пудов. Читает текущий и переходит к следующему. Различается только интерпретация прочитанного.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует