Доброго всем дня, возникла следующая проблема, идёт разбор XML с помощью следующего кода:
Получаем значение КАН из тега can_mileage, но иногда обработка цепляет can_mileage в отрицательном значении, вероятно из-за того что оно приходит из запроса первым, 3 недели бьюсь, не могу модифицировать для отсеивания отрицательных значений. Пример Данных из запроса XML в прикреплённом файле.
Заранее благодарю за любую помощь.
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(АдресФайла);
РезультатРазборки = Новый Массив;
ТипПриходныйОрдерXDTO = ФабрикаXDTO.Тип("http://localhost/testXML","table");
ПоказанияКан = 0;
Пока ЧтениеXML.Прочитать() Цикл
Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "messages" Цикл
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходныйОрдерXDTO);
Если ДокументXDTO.count = "1" Тогда
Если НЕ ДокументXDTO.message.Свойства().Получить("engine_temp") = Неопределено Тогда
ПоказанияКан = ДокументXDTO.message.can_mileage;
Если ПервоеСообщение Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Иначе
Для каждого ТС Из ДокументXDTO.message Цикл
Если НЕ ТС.Свойства().Получить("engine_temp") = Неопределено Тогда
ПоказанияКан = ТС.can_mileage;
Если ПервоеСообщение Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
возврат ПоказанияКан;
ПоказатьПолучаем значение КАН из тега can_mileage, но иногда обработка цепляет can_mileage в отрицательном значении, вероятно из-за того что оно приходит из запроса первым, 3 недели бьюсь, не могу модифицировать для отсеивания отрицательных значений. Пример Данных из запроса XML в прикреплённом файле.
Заранее благодарю за любую помощь.
Прикрепленные файлы:
services.wialon.by.xml
По теме из базы знаний
- Разборка-сборка XML
- Альтернативные способы работы с XML. Часть 1: Введение в DOM или объектная модель документа XML
- Разбор XML документа - почти все возможные способы
- УТ 11.1 Загрузка Заказа клиента из xml
- Разбор XML Документа с помощью XDTO, без использования XDTO-пакетов и XML-схем (для очень ленивых)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) нужно вернуть первое положительное значение can_mileage?
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(АдресФайла);
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
messages = ДокументXDTO.result.items.item.messages.message;
Для Каждого message Из messages Цикл
Если Число(message.can_mileage) > 0 Тогда
Возврат message.can_mileage;
КонецЕсли;
КонецЦикла;
Возврат 0;
Показать
(10)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(АдресФайла);
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
messages = ДокументXDTO.result.items.item.messages.message;
Если messages.Количество() > 0 Тогда
Для Каждого message Из messages Цикл
Если Число(message.can_mileage) > 0 Тогда
Возврат message.can_mileage;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат 0;
Хм, а как его встроить в обработку, мне нужно чтобы ПоказанияКан = ДокументXDTO.message.can_mileage;
ЧтениеXML.ОткрытьФайл(АдресФайла);
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
messages = ДокументXDTO.result.items.item.messages.message;
Если messages.Количество() > 0 Тогда
Для Каждого message Из messages Цикл
Если Число(message.can_mileage) > 0 Тогда
Возврат message.can_mileage;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат 0;
(11) если в (0) не полный код и нужно в него встроить, тогда так:
Только учите, что can_mileage это строка. Для получения числа нужно приводить к числу.
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(АдресФайла);
РезультатРазборки = Новый Массив;
ТипПриходныйОрдерXDTO = ФабрикаXDTO.Тип("http://localhost/testXML","table");
ПоказанияКан = 0;
Пока ЧтениеXML.Прочитать() Цикл
Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "messages" Цикл
ДокументXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходныйОрдерXDTO);
Если ДокументXDTO.count = "1" Тогда
Если НЕ ДокументXDTO.message.Свойства().Получить("engine_temp") = Неопределено И Число(ДокументXDTO.message.can_mileage) > 0 Тогда
ПоказанияКан = ДокументXDTO.message.can_mileage;
Если ПервоеСообщение Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Иначе
Для каждого ТС Из ДокументXDTO.message Цикл
Если НЕ ТС.Свойства().Получить("engine_temp") = Неопределено И Число(ДокументXDTO.message.can_mileage) > 0 Тогда
ПоказанияКан = ТС.can_mileage;
Если ПервоеСообщение Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
возврат ПоказанияКан;
ПоказатьТолько учите, что can_mileage это строка. Для получения числа нужно приводить к числу.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот