Имя: Пароль:
1C
1С v8
Не получается получить значение ЧтениеXML
, ,
0 Trotter
 
30.05.19
11:18
Здравствуйте!
Есть xml в нём есть срока:
<price>150.0</price>
Код:
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        Если Чтение.Имя="price" Тогда
                Сумма = Сумма + Число(Чтение.Значение);
        КонецЕсли;
    КонецЕсли;
Но вот беда, Чтение.Значение = ""
А за следующий проход когда Чтение.Имя <> "price" берётся значение "150"
Вроде раньше было достаточно выше приведённого кода, что бы получить значение.
Как сейчас ? Или формат xml нужно предварительно привести к чему - то другому (кодировка например) ?
1 Trotter
 
30.05.19
11:29
На следующей итерации
Чтение.Имя = #text
и там мне нужное значение
2 shadow_sw
 
30.05.19
11:34
Сумма = Сумма + Число(Значение);
3 Trotter
 
30.05.19
11:36
(2) Значение    {(1,1)}: Переменная не определена (Значение)
4 shadow_sw
 
30.05.19
11:36
Пока Чтение.ПрочитатьАтрибут() Цикл
                
                    ТипУзла = Чтение.ТипУзла;
                    Имя = Чтение.Имя;
                    Значение = Чтение.Значение;
                    //Код тт            
                    Если Имя = "Тест" Тогда
                        НС.КодТТ = Значение;                
                    КонецЕсли;

Вот  работающий код
5 Жан Пердежон
 
30.05.19
11:41
(4) для какого-то другого xml и какой-то другой задачи
6 Trotter
 
30.05.19
11:46
(5) Ага. в (4) что - то не то.
7 Trotter
 
30.05.19
14:07
Ап, что не так ?
У вас работает ?
8 НЕА123
 
30.05.19
14:24
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Пока Чтение.ПрочитатьАтрибут() Цикл//////////

        Если Чтение.Имя="price" Тогда
                Сумма = Сумма + Число(Чтение.Значение);
        КонецЕсли;
КонецЦикла;//////////////////////
    КонецЕсли;
9 Trotter
 
30.05.19
15:08
(8) Нет, не работает.
Переделал чутка:
    Пока Чтение.Прочитать() Цикл
        Пока Чтение.ПрочитатьАтрибут() Цикл    
            Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя="price" Тогда
                Если Чтение.Значение = "" Тогда
                Иначе
                    Сумма = Сумма + Число(Чтение.Значение);
                КонецЕсли;
            КонецЕсли;
        КонецЦикла    
    КонецЦикла;
    Сообщить(Сумма);
10 Trotter
 
30.05.19
15:10
И так нет:
Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя="price" Тогда
            Пока Чтение.ПрочитатьАтрибут() Цикл
                Если Чтение.Значение = "" Тогда
                Иначе
                    Сумма = Сумма + Число(Чтение.Значение);
                КонецЕсли;
            КонецЦикла
        КонецЕсли;
        
    КонецЦикла;
    Сообщить(Сумма);
11 Trotter
 
30.05.19
15:11
Это же не атрибут, а значение.
Нее пойму это в платформе поменяли или кривой xml
12 Trotter
 
30.05.19
15:17
Кажется в платформе.
Переделали логику расписывания.
13 ptiz
 
30.05.19
15:32
Какие атрибуты? Где тут атрибут?
"150.0" в данном примере лежит в ТипУзлаXML.Текст !
14 Vinianel
 
30.05.19
15:38
(0) Так и спускайся ещё на уровень. Что-то вроде:

Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя="price" Тогда
        Чтение.Прочитать();
        Сумма = Сумма + Число(Чтение.Значение);
КонецЕсли;
15 Trotter
 
30.05.19
15:41
(13) Да вот и не понятно почему рекомендуют атрибуты...
(14) Да так заработало.
16 ptiz
 
30.05.19
15:43
(15) При разборе надо читать то, что в файле - могут быть и атрибуты, и просто текст.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший