|
прочитать файл xml | ☑ | ||
---|---|---|---|---|
0
evg61
18.09.14
✎
15:15
|
Уважаемые коллеги, здравствуйте!
Возникла необходимость прочитать xml-файл. Файл таков: <?xml version="1.0" encoding="windows-1251"?> <ТранспортныеНакладные> <ТранспортнаяНакладная НомерТТН="73810" ДатаТТН="20140909" Сумма="16441"/> <ТранспортнаяНакладная НомерТТН="74089" ДатаТТН="20140909" Сумма="10967"/> <ТранспортнаяНакладная НомерТТН="74121" ДатаТТН="20140909" Сумма="22080"/> <ТранспортнаяНакладная НомерТТН="74147" ДатаТТН="20140909" Сумма="21013"/> </ТранспортныеНакладные> Пробую решить задачу без XDTO. Здесь на форуме приводился код: Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ПутьКФайлу); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла); Пока Чтение.ПрочитатьАтрибут() Цикл // Прочитать данные узла атрибута. // Обработать полученные значения. КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда // В примере просто выводим текст в окно сообщений. Сообщить("Текст:" + Чтение.Значение); ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // В примере просто выводим признак конца элемента // в окно сообщений Сообщить("--Конец:" + Чтение.Имя); КонецЕсли; КонецЦикла; Этим кодом я читаю информацию о всех накладных, кроме первой. Код не находит ТипУзлаXML.НачалоЭлемента Почему так получается не разобрался. Можете подсказать в чём дело? Спасибо! |
|||
1
КонецЦикла
18.09.14
✎
15:27
|
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если Чтение.Имя = "ТранспортнаяНакладная" Тогда Если Чтение.КоличествоАтрибутов() > 0 Тогда Пока Чтение.ПрочитатьАтрибут() Цикл Если Чтение.Имя = "НомерТТН" Тогда .... КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; |
|||
2
Балоун
18.09.14
✎
15:29
|
больше так не ври
http://i.imgur.com/eueDOpn.png |
|||
3
Барматолог
18.09.14
✎
15:48
|
(0) XDTO?
|
|||
4
evg61
18.09.14
✎
15:52
|
Люди, спасибо! Насчёт приврать - ни в коем случае!
Дописал в код анализ типа узла и соответственно выдача сообщения о типе. Вот что выдаёт у меня в окне служебных сообщений: КонецЭлемента - НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - КонецЭлемента - Платформа у меня 8.1 |
|||
5
evg61
18.09.14
✎
15:53
|
В том то и дело, что не находит начало первого элемента...
|
|||
6
Балоун
18.09.14
✎
15:54
|
а ну-ка наугад..
Чтение.Прочитать(); Пока Чтение.Прочитать() Цикл |
|||
7
evg61
18.09.14
✎
15:59
|
Результат:
НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - НачалоЭлемента - ТранспортнаяНакладная КонецЭлемента - КонецЭлемента - :-)))))))))))))) |
|||
8
Балоун
18.09.14
✎
16:00
|
году в 9м со мной такое было. что это было, я не помню
|
|||
9
evg61
18.09.14
✎
16:02
|
Спасибо за помощь!
|
|||
10
evg61
18.09.14
✎
16:03
|
Попробую использовать XDTO...
|
|||
11
Зеленый пень
18.09.14
✎
16:05
|
Функция ПрочитатьXMLВДеревоЗначений(ИмяФайла)
ДЗ = Новый ДеревоЗначений; ДЗ.Колонки.Добавить("Реквизит"); ДЗ.Колонки.Добавить("Тип"); ДЗ.Колонки.Добавить("Значение"); Реквизит = ""; Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ИмяФайла); Строки = ДЗ.Строки; Строки.Очистить(); НоваяСтрока = ДЗ; Пока Чтение.Прочитать() Цикл ТипУзла = Чтение.ТипУзла; Если ТипУзла = ТипУзлаXML.НачалоЭлемента ИЛИ ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Реквизит = СокрЛП(Чтение.Имя); КонецЕсли; Значение = СокрЛП(Чтение.Значение); Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда НоваяСтрока = НоваяСтрока.Строки.Добавить(); НоваяСтрока.Реквизит = Реквизит; НоваяСтрока.Тип = "Узел"; Если Чтение.КоличествоАтрибутов() <> 0 Тогда Строки = НоваяСтрока.Строки; Пока Чтение.ПрочитатьАтрибут() Цикл Атрибут = Строки.Добавить(); Атрибут.Реквизит = Чтение.Имя; Атрибут.Значение = Чтение.Значение; Атрибут.Тип = "Атрибут"; КонецЦикла; КонецЕсли; ИначеЕсли ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Если НоваяСтрока.Родитель = Неопределено Тогда НоваяСтрока = ДЗ; Иначе НоваяСтрока = НоваяСтрока.Родитель; КонецЕсли; Иначе НоваяСтрока.Значение = Значение; КонецЕсли; КонецЦикла; Чтение.Закрыть(); Возврат ДЗ; КонецФункции // ПрочитатьXMLВДеревоЗначений(ИмяФайла) |
|||
12
evg61
18.09.14
✎
16:07
|
Балоун, вопрос, а на какой платформе выполнялось действие? По картинке это интерфейс не 8.1....
|
|||
13
evg61
18.09.14
✎
16:11
|
Зелёный пень, спасибо! Занести данные xml в таблицу я сделал сразу. Вопрос был несколько в другом. Я попробую конструкции приведённые в Вашем коде.
Люди, прошу прощения, вынужден уйти! Ещё раз всем спасибо за помощь!!!! |
|||
14
Барматолог
18.09.14
✎
16:13
|
XDTO [x]
|
|||
15
Балоун
18.09.14
✎
16:14
|
(12) в 9м году у меня была 8.1
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |