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

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

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

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

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

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

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

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

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

читает через одного 1 - 3 - 5 и так до конца
3 RomaH
 
naïve
05.04.19
07:46
не понял
Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ,лТип);
делает с ЧтениеХМЛ тоже что и Прочитать()
4 RomaH
 
naïve
05.04.19
07:54
как правильно написать тоже самое?

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