Имя: Пароль:
1C
 
ЧтениеXML
0 mrpink
 
06.07.15
08:12
Добрый день! Подскажите пожалуйста, при методе прочитать() объекта ЧтениеXML мы переходим к следующему узлу, а как после обхода всех узлов вернутся например в начало? Закрывать файл и открывать снова?
1 ЛисИзЛеса
 
06.07.15
08:29
ЧтениеXML
Предназначен для последовательного чтения XML-данных из файла или строки...
ЧтениеXML.ПервыйАтрибут НЕ поможет.
2 mrpink
 
06.07.15
08:31
(1) тоесть переоткрывать?
3 ЛисИзЛеса
 
06.07.15
08:40
(2)да
4 RomaH
 
naïve
06.07.15
08:40
ТекстНСИ = ТекстРеестра.ПолучитьТекст();
    
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    
    ЧтениеXML = Новый ЧтениеXML();
    ЧтениеXML.УстановитьСтроку(ТекстНСИ);
    
    Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

попробуй так - ну его "ЧтениеXML"
5 mrpink
 
06.07.15
08:47
(4) Спавсибо - Попутно вопрос к знатоку фабрик, не подскажете, как работает параметр Тип в методе ПрочитатьXML? Я предполагаю, что он позволяет читать из файла XML только данные определенного типа, но у меня чего-то не получается - ошибка вылетает
6 ЧеловекДуши
 
06.07.15
10:06
(4) Все это хорошо, если файлик пару байт :)
7 ЧеловекДуши
 
06.07.15
10:06
+(6) Если так подходить. Да ну его этот ХМЛ, DBF наше все :)
8 RomaH
 
naïve
06.07.15
10:28
(6) ну не знаю - а по 50 метров и читаю и создаю - ничего
9 mrpink
 
06.07.15
10:50
Помогите понять, есть XML файл вообще не из 1с с данными, я замучался создавать для него схему, а что она мне даст? Сейчас вот есть стандартная фабрика, я читаю в неё данные из этого файла, без всяких схем, получаю ОбъектXDTO, со всеми полями через точку, а что даст схема? Создавать и сохранять в таком-же формате мне не нужно, только читать
10 RomaH
 
naïve
06.07.15
10:55
(9) схема даст читать дату как дату, а не как строку
11 mrpink
 
06.07.15
11:08
в том файле из которого я читаю, довольно сложная структура, кроме даты, и др. простых типов, схема даст какое-нибудь удобство чтения вложенных объектов? ТО есть стоит ли мне дальше мучатся со схемой?
12 Господин ПЖ
 
06.07.15
11:14
схема дает валидацию и приведение типов
13 RomaH
 
naïve
06.07.15
11:17
схема - ненужна при чтении
14 Господин ПЖ
 
06.07.15
11:18
(13) аполитично рассуждаешь (с) кавк. пленница

она даст понимание что документ читать вообще не надо - т.к. он кривой как сабля турецкая
15 RomaH
 
naïve
06.07.15
11:21
(14) я так и не смог добиться создания боле-менее читаемой для 1С схемы (что бы с типами)
получается, что да - только для валидации
16 mrpink
 
06.07.15
11:22
Спасибо - камень с души, оставляю как есть тогда))) я просто надеялся что создав схему, получу больше удобств, потом смотрю, дак всё уже есть...лучшее враг хорошего
17 Господин ПЖ
 
06.07.15
11:25
(15) это уже не мало... напихать в базу 40 бочек всякого дерьма и потом откатывать все т.к. обязательного поля нет
18 mrpink
 
06.07.15
11:25
я собственно, надеялся, что создав схему и посмотрев на загруженный объектХДТО в отладчике в колонке тип увидеть свои типы, а метод ПрочитатьХМЛ фабрики позволит мне указав свои типы выбирать как-то нужное из загружаемого файла...как-то так
19 RomaH
 
naïve
06.07.15
11:26
держи еще:
    ДанныеСчета = Неопределено;
    ИндексСчета = 0;
    
    Пока ПолучитьУзелСписка(ДанныеПациента.register_accounts.personal_account,ИндексСчета,ДанныеСчета) Цикл
        
Функция ПолучитьУзелСписка(СписокXDTO,Индекс,ЭлементСписка)
    
    Если ТипЗнч(СписокXDTO) = Тип("ОбъектXDTO") И Индекс = 0 Тогда
        ЭлементСписка = СписокXDTO;
        Индекс = Индекс + 1;
        Возврат Истина;    
    КонецЕсли;
    
    Если ТипЗнч(СписокXDTO) = Тип("СписокXDTO") И Индекс < СписокXDTO.Количество() Тогда
        ЭлементСписка = СписокXDTO.Получить(Индекс);
        Индекс = Индекс + 1;
        Возврат Истина;
    КонецЕсли;
    Индекс = Индекс + 1;
    
    Возврат Ложь;
    
КонецФункции


иногда еще добавляю проверку на наличие реквизита, топорно
есть более красивое решение?
20 sapphire
 
06.07.15
12:45
Выбирать нужное нужно используя XPath
21 sapphire
 
06.07.15
12:47
+ (20) Когда вам нужно найти какой-то конкретный документ вы же не перебираете все документы подряд
22 mrpink
 
06.07.15
13:14
...я нашёл в чем дело, пришлось по создаваемой мною схеме создать объект, записать и там я увидел - к наименованию типа добавляется пространство имен xmlns="http://www.sample-package.org";, в читаемом мною файле такого конечно нет, а имя типа складывается из пространства и имени, как быть?