|
v7: Импорт данных из xml | ☑ | ||
---|---|---|---|---|
0
MaxStarkov
04.08.11
✎
14:26
|
Задача стоит следующая:
имеется xml файл следующего содержания: <?xml version="1.0" encoding="WINDOWS-1251"?> -<Корневой> <!--Выгрузка проводок за 31.01.2011 23:59:59--> <Проводка Примечание="#Выгрузка проводок за 31.01.2011 ОсновныеНачисления" Сумма="15 000" СубконтоКт3="" СубконтоКт2="заработная плата" СубконтоКт1="Сотрудник" Кредит="70" СубконтоДт3="" СубконтоДт2="" СубконтоДт1="Заработная плата без НДФЛ" Дебет="26" Дата="31.01.2011"/> </Корневой> понятно, что элементов в файле в действительности значительно больше. Этот файл нужно загрузить в 1С 7.7, загрузить просто хотя бы для того, чтобы в дальнейшем с этими данными можно было бы выполнять различные действия. И вроде бы все понятно, вот мой код по загрузке: Процедура Сформировать() // Формирование таблицы проводок // Проверка на загрузку внешней компоненты Если гВнешняяКомпонента_Загрузить("v7plus.dll")=0 Тогда Возврат; КонецЕсли; // Проверка на заполнение пути и имени файла Если ПустоеЗначение(ПутьФайл)=1 Тогда Предупреждение("Не выбран файл!"); Возврат; КонецЕсли; // Импорт данных Анализатор=СоздатьОбъект("AddIn.XMLParser"); Д=Анализатор.СоздатьДокумент(); Д.Загрузить(Каталог+Файл); Узел=Д.ВыбратьУзел("Корневой"); Для i=1 По Узел.КоличествоПодчиненных() Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); Сообщить(ТекУзел.ПолучитьАтрибут("Сумма")); КонецЦикла; КонецПроцедуры файл загружается и код работает до строчки: Сообщить(ТекУзел.ПолучитьАтрибут("Сумма")); на этой строчке все прерывается и выдается сообщение: Поле агрегатного объекта не обнаружено (ПолучитьАтрибут) смысл ошибки мне понятен, но как все же прочитать данные из файла о сумме, дебете, кредите и т.д.? И ведь применяю к элементу ТекУзел действующий метод, но все равно получается ошибка. А вот если например применить метод ПредставлениеXML(), то в окне сообщений выводится строка со всеми атрибутами элемента, но как обратиться и получить данные каждого из них по отдельности? В качестве xml парсера обычная v7plus.dll |
|||
1
Ёпрст
04.08.11
✎
14:32
|
(0)
Для i=0 По Узел.КоличествоПодчиненных()-1 Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); |
|||
2
andrewks
04.08.11
✎
14:33
|
-<Корневой>
что за тире? |
|||
3
Ёпрст
04.08.11
✎
14:33
|
+1
Параметры: <НомерУзла> - числовое выражение, содержащее номер требуемого узла. Нумерация узлов начинается с нуля ©СП ЗЫ: СП купить у ДенисЧ |
|||
4
ЧеловекДуши
04.08.11
✎
14:35
|
||||
5
andrewks
04.08.11
✎
14:40
|
лучше юзать msxml
|
|||
6
MaxStarkov
04.08.11
✎
14:41
|
что за тире?
это просто из експлорера копировал файл. тире на самом деле нет) Для i=0 По Узел.КоличествоПодчиненных()-1 Цикл ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i); не работает, пробовал уже. да, видимо придется воспользоваться OpenXML. В итоге можно сказать, что парсер v7plus.dll не рабочий? |
|||
7
andrewks
04.08.11
✎
14:43
|
парсер v7plus.dll рабочий. но не на любом файле и не на любом окружении
|
|||
8
MaxStarkov
04.08.11
✎
14:46
|
Ну хорошо, сделаю все на OpenXML. Делал даже когда то на нем...года два назад. Всем спасибо за оперативные ответы!
|
|||
9
andrewks
04.08.11
✎
15:16
|
Попытка
//ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0"); ДОМ=СоздатьОбъект("MSXML2.DOMDocument"); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.async=0; ДОМ.validateOnParse=-1; ДОМ.resolveExternals=-1; ДОМ.load(ИмяФайла); Если (ДОМ.parseError.errorCode<>0) Тогда // ошибки при проверке валидности Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!"); Возврат 0; КонецЕсли; Элем1=ДОМ.getElementsByTagName("Корневой").item(0); Для ном=0 По Элем1.childNodes.length-1 Цикл ДочЭлем=Элем1.childNodes(ном); Если (ДочЭлем.nodeType=1) Тогда Сообщить("Атрибут Сумма = "+ДочЭлем.getAttribute("Сумма")); КонецЕсли; КонецЦикла; |
|||
10
andrewks
04.08.11
✎
15:24
|
(3) по-ходу, в СП пистёшь. с единицы принимает только
а трабла в комменте. в7+, в силу своей ограниченности, не знает про камменты в хмл |
|||
11
MaxStarkov
04.08.11
✎
15:52
|
"а трабла в комменте."
Точно!!! Без него все работает отлично. Огромное спасибо за помощь! |
|||
12
1Сергей
04.08.11
✎
16:26
|
В любом месте дерева может быть размещен элемент-комментарий. XML-комментарии размещаются внутри специального тега, начинающегося с символов <!-- и заканчивающегося символами -->. Два знака дефис (--) внутри комментария присутствовать не могут.
wiki:XML |
|||
13
andrewks
04.08.11
✎
16:33
|
(12) и?
|
|||
14
1Сергей
04.08.11
✎
16:55
|
(13) а у него -<Корневой>
|
|||
15
andrewks
04.08.11
✎
17:00
|
(14) читай (2)(6)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |