Имя: Пароль:
1C
1С v8
Загрузка из XML
0 Bumerang
 
25.06.14
14:23
Всем добрый день!
Есть файл выгрузки из базы SQL в формате xml
Делаю загрузку этого файла. Но дело в том, что при проверке условия ТипУзлаXML.КонецЭлемента оно выполняется 2 раза

Вот код:

    Пока ЧтениеXML.Прочитать() Цикл
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ЧтениеXML.ПрочитатьАтрибут();
            Атрибут = ЧтениеXML.Значение;
        ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
            
            Если Атрибут = "client" Тогда
                СЗ.Добавить(ЧтениеXML.Значение);
            КонецЕсли;
            Если Атрибут = "phone" Тогда
                СЗ.Добавить(ЧтениеXML.Значение);
            КонецЕсли;
            Если Атрибут = "serviceman" Тогда
                СЗ.Добавить(ЧтениеXML.Значение);
            КонецЕсли;

        ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента и Атрибут = "serviceman" Тогда
            СЗ.Очистить();
          КонецЕсли;

    КонецЦикла;

Вот запись таблицы из файла

        <!-- Таблица orders -->
        <table name="orders">
            <column name="id">1</column>
            <column name="client">Вася</column>
            <column name="phone">123456789</column>
            <column name="goods">Монитор LG M228WA</column>
            <column name="serial"></column>
            <column name="complectation"></column>
            <column name="priority">medium</column>
            <column name="status">complete</column>
            <column name="defects">Монитор-не включается</column>
            <column name="save_date">1351598257</column>
            <column name="complete_date">0</column>
            <column name="serviceman">Стас</column>
        </table>

Подскажите, что сделано не верно. В какую сторону смотреть
1 Wobland
 
25.06.14
14:24
а что не так?
2 Wobland
 
25.06.14
14:26
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ЧтениеXML.ПрочитатьАтрибут();
            Атрибут = ЧтениеXML.Значение;

а какой из двух тысяч атрибутов тут имеется в виду?
3 Bumerang
 
25.06.14
14:28
(1) Дело в том, что условие
ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента и Атрибут = "serviceman"

выполняется 2 раза, т.е. список значений СЗ заполняется, пото проверяется условие на КонецЭлемента СЗ очищается, потом повторно выполняется условие на конецЭлемента и опять очищается список СЗ, хотя он уже очищен.
4 Wobland
 
25.06.14
14:28
(3) атрибут присваивай правильно
5 Bumerang
 
25.06.14
14:41
(4) А как правильно? Присваивать в цикле?
6 Рэйв
 
25.06.14
14:47
(4)
//-------
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);

Пока Чтение.Прочитать() Цикл

    // Прочитать "структурные части" элементов.
    // Проверить, какая часть элемента - текущая.
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла);

        // Атрибуты элементов можно читать только если текущая часть -
        // начало элемента
        Пока Чтение.ПрочитатьАтрибут() Цикл

            // Прочитать данные узла атрибута.
            ТипУзла = Чтение.ТипУзла;
            Имя = Чтение.Имя;
            Значение = Чтение.Значение;

            // Обработать полученные значения.

        КонецЦикла;

    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда

        // В примере просто выводим текст в окно сообщений.
        Сообщить("Текст:" + Чтение.Значение);

    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда

        // В примере просто выводим признак конца элемента
        // в окно сообщений Сообщить("--Конец:" + Чтение.Имя);

    КонецЕсли;

КонецЦикла;


(C)Габец.

//--------
купи себе уже книжку.
7 Wobland
 
25.06.14
14:48
(5) откуда ж я знаю, зачем ты наполняешь СЗ, чтобы потом его почистить
8 Рэйв
 
25.06.14
14:48
(6) к (5)