|
Проблема с xml | ☑ | ||
---|---|---|---|---|
0
Insainer
07.05.13
✎
04:14
|
Здраствуйте, помогите пожалуйста с одним вопросом - как прочитать xml документ. У меня есть обработка, которая из экселя заносит данные в xml, так вот - ее нужно переделать и тут проблема - раньше формат xml был один:
[XML]<?xml version="1.0" encoding="windows-1251"?> <Document Name="Briefcase" Version="1.0" CreateDate="2012-08-07T12:25:44" SaveDate="2012-09-03T16:54:10" Id="312"> <Tables> <Table Id="1" Name="KGTT" Title="Типы назначения земли" KeyFields="RASREFSTRID" DisplayFields="REF_STR;SEQUENCE" CanAdd="0" CanEdit="0" CanDelete="0" Hidden="1"> <Columns> <Column Id="1" Name="RASREFSTRID" Title="Код строки" DataType="Integer" DataSize="0" Hidden="1"/> <Column Id="2" Name="REF_STR" Title="Описание" DataType="String" DataSize="200"/> <Column Id="3" Name="SEQUENCE" Title="Очередность" DataType="SmallInt" DataSize="0"/> </Columns> <Rows> <Row Id="1"> <Cell ColumnId="1">243</Cell> <Cell ColumnId="2">Предприятие связи</Cell> <Cell ColumnId="3">{{null}}</Cell> </Row> <Row Id="2"> <Cell ColumnId="1">244</Cell> <Cell ColumnId="2">Жилые кварталы</Cell> <Cell ColumnId="3">{{null}}</Cell> ...[/XML] Теперь другой: [XML]<Data> <xs:schema id="Data" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop"> <xs:element name="Data" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:FILE_ID="1042" msprop:OBJ_NO_TEMP="0" msprop:LOGIN="Bars257"> <xs:complexType> ... </xs:complexType> </xs:element> </xs:schema> Далее сами данные: <ATRKINDFIELDS> <ATRKINDID>12</ATRKINDID> <FIELDNAME>NAME</FIELDNAME> <LABEL>Наименование</LABEL> <REFERENCE>0</REFERENCE> <DE_x0024_READONLY>0</DE_x0024_READONLY> <TYPE_DECLARE>varchar(250)</TYPE_DECLARE> <IS_REESTRTABLE_FIELD>0</IS_REESTRTABLE_FIELD> </ATRKINDFIELDS> <ATRKINDFIELDS> <ATRKINDID>12</ATRKINDID> <FIELDNAME>ADRES</FIELDNAME> <LABEL>Адрес (место нахождения)</LABEL> <REFERENCE>0</REFERENCE> <DE_x0024_READONLY>0</DE_x0024_READONLY> <TYPE_DECLARE>varchar(250)</TYPE_DECLARE> <IS_REESTRTABLE_FIELD>0</IS_REESTRTABLE_FIELD> </ATRKINDFIELDS> ... <Data>[/XML] Так вот, как работать с новым форматом при помощи 1С. Старая обработка читает данные от <xs:schema до </xs:schema>, то есть шапку, где объявляются названия таблиц и тому подобное, как мне добраться до самих данных, которые ниже? |
|||
1
DreamMaster
07.05.13
✎
05:41
|
ДокXML = ПолучитьCOMОбъект("", "MSXML2.DOMDocument");
лФайл = Новый Файл(ПолноеИмяФайла); ДокXML.Load(ИмяПолученногоФайла.ПолноеИмя); //дале просто читаешь что тебе нужно Для i=0 по ДокXML.DocumentElement.childNodes.length-1 цикл Документ =ДокXML.DocumentElement.childNodes.item(инт); переменная = СокрЛП(Документ.SelectSingleNode("имятэга").text) конеццикла |
|||
2
DreamMaster
07.05.13
✎
05:42
|
(ИмяПолученногоФайла.ПолноеИмя = ПолноеИмяФайла)
|
|||
3
Insainer
07.05.13
✎
17:01
|
Спасибо DreamMaster, я тут разобрался что нужно сделать. Я написал код, который должен записывать из Excel в таблицу значений, а потом добавлять записи в xml - файл - конечная цель всего этого, знаю, что код не рабочий, у кого нибудь есть примеры как добавить в !существующий! xml дополнительные записи? Есть ли какой - то смысл в моём коде и как его можно было бы доработать. Задача вообще стоит проверить есть ли между Excel и XML совпадающие ОС. Если да, то перезаписать XML данными из таблицы значений, если нет, добавить недостающие. Но я в коде сделал просто добавить (от простого к сложному). Прошу кого-нибудь ответить, просто первый раз с xml столкнулся - как котёнок :)
Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗДвиж = Новый ТаблицаЗначений; ТЗДвиж.Колонки.Добавить("Наименование",,"Наименование"); ТЗДвиж.Колонки.Добавить("ИнвентарныйНомер",,"ИнвентарныйНомер"); ТЗДвиж.Колонки.Добавить("ПервоначальнаяСтоимость",,"ПервоначальнаяСтоимость"); ТЗДвиж.Колонки.Добавить("ОстаточнаяСтоимость",,"ОстаточнаяСтоимость"); ТЗДвиж.Колонки.Добавить("ПроцентИзноса",,"ПроцентИзноса"); НомерАвто = 0; НомерДвиж = 0; НомерОбъекта = 0; Чтение = Новый ЧтениеXML(); Попытка Чтение.Прочитать(); Исключение Возврат; КонецПопытки; ВыбФайл = Новый Файл(ИмяФайла1); Если НЕ ВыбФайл.Существует() Тогда Сообщить("Файл эксель не существует!"); Возврат; КонецЕсли; // Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ИмяФайла1); ExcelЛист = Excel.Sheets(1); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); Возврат; КонецПопытки; ТЗДвиж.Очистить(); Стр = 10; Состояние("Запись в таблицу значений"); Пока Не ПустаяСтрока(ExcelЛист.Cells(Стр,2).Value) Цикл ИнвентарныйНомер = СокрЛП(ExcelЛист.Cells(Стр,3).Value); НоваяСтрока = ТЗДвиж.Добавить(); НоваяСтрока.Наименование = СокрЛП(ExcelЛист.Cells(Стр, 2).Value); НоваяСтрока.ИнвентарныйНомер = СокрЛП(ExcelЛист.Cells(Стр, 3).Value); НоваяСтрока.ПервоначальнаяСтоимость = СокрЛП(ExcelЛист.Cells(Стр, 12).Value) + СокрЛП(ExcelЛист.Cells(Стр, 14).Value); НоваяСтрока.ОстаточнаяСтоимость = СокрЛП(ExcelЛист.Cells(Стр, 15).Value); НоваяСтрока.ПроцентИзноса = СокрЛП(ExcelЛист.Cells(Стр, 11).Value); Стр = Стр + 1; КонецЦикла; Excel.WorkBooks.Close(); Excel = 0; Зап(); КонецПроцедуры Процедура Зап() Состояние("Запись файла xml"); Чтение = Новый ЧтениеXML(); Чтение.ОткрытьФайл(ИмяФайла); Запись = Новый ЗаписьXML(); Запись.ОткрытьФайл(ФайлНаДиске.Путь + ФайлНаДиске.ИмяБезРасширения + "~" + ФайлНаДиске.Расширение, "windows-1251"); Запись.ЗаписатьОбъявлениеXML(); Пока Чтение.Прочитать() Цикл Если Чтение.Имя = "OBJECT_6" Тогда Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Для Каждого СтрокаТЗ из ТЗДвиж Цикл Запись.ЗаписатьНачалоЭлемента("OBJECT_6"); Запись.ЗаписатьНачалоЭлемента("NAME"); Запись.ЗаписатьТекст(СтрокаТЗ.Наименование); Запись.ЗаписатьКонецЭлемента("NAME"); Запись.ЗаписатьНачалоЭлемента("OBJ_NO_BAL"); Запись.ЗаписатьТекст(СтрокаТЗ.ИнвентарныйНомер); Запись.ЗаписатьКонецЭлемента("OBJ_NO_BAL"); Запись.ЗаписатьНачалоЭлемента("COMIS_COAST"); Запись.ЗаписатьТекст(СтрокаТЗ.ПервоначальнаяСтоимость); Запись.ЗаписатьКонецЭлемента("COMIS_COAST"); Запись.ЗаписатьНачалоЭлемента("CUR_COAST"); Запись.ЗаписатьТекст(СтрокаТЗ.ОстаточнаяСтоимость); Запись.ЗаписатьКонецЭлемента("CUR_COAST"); Запись.ЗаписатьНачалоЭлемента("OBJECT_IZNOS_PROC"); Запись.ЗаписатьТекст(СтрокаТЗ.ПроцентИзноса); Запись.ЗаписатьКонецЭлемента("OBJECT_IZNOS_PROC"); КонецЦикла; КонецЕсли; Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
4
Insainer
07.05.13
✎
17:07
|
Вот XML:
<OBJECT_5> <NAME>Земельный участок площадью 12123 кв.м (кадастровый номер 25:28:05 00 49:0168)</NAME> <OBJECT_INON>0067000008</OBJECT_INON> <REESTR_NO_DATE>2006-06-16T00:00:00+11:00</REESTR_NO_DATE> <ADRES>Ориентир: зд. онколог. диспансера. Адрес ор.: г. Владивосток, Русская, 59, ориентира находится в границах участка</ADRES> <PL_COMMON>12123</PL_COMMON> <KADASTR>25:28:05 00 49:0168</KADASTR> <OBJECT_HISTORY_NO /> <OBJECT_RIGHT_OTHER_RASPNO /> <RIGHT_OTHER_NO /> <OBJECT_RIGHT_OTHER_AKTNO /> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00122903</OBJ_NO> <OBJKINDID>5</OBJKINDID> <ARXIV /> <BAL_INN>42</BAL_INN> <DE_x0024_ACCESS_DATE>2013-04-24T14:19:59+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> </OBJECT_5> <OBJECT_6> <NAME>2-канальный теплосчетчик ТСК7</NAME> <DESTINATION /> <ADRES>г.Владивосток, ул.Русская, 59</ADRES> <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE> <OBJ_NO_BAL>000000000002064</OBJ_NO_BAL> <COMIS_COAST>37000</COMIS_COAST> <CUR_COAST>25000</CUR_COAST> <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE> <OBJECT_IZNOS_PROC>68</OBJECT_IZNOS_PROC> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00014602</OBJ_NO> <OBJECT_GODV>27.08.2008</OBJECT_GODV> <OBJECT_MARKA /> <OBJECT_CENNOE>0</OBJECT_CENNOE> <OBJECT_VVOD /> <PRIVATE>13</PRIVATE> <OBJKINDID>6</OBJKINDID> <BAL_INN>42</BAL_INN> <ARXIV /> <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> </OBJECT_6> <OBJECT_6> <NAME>Автоматическая телефонная станция</NAME> <DESTINATION /> <ADRES>г.Владивосток, ул.Русская, 59</ADRES> <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE> <OBJ_NO_BAL>000000000002825</OBJ_NO_BAL> <COMIS_COAST>86000</COMIS_COAST> <CUR_COAST>41000</CUR_COAST> <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE> <OBJECT_IZNOS_PROC>48</OBJECT_IZNOS_PROC> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00014603</OBJ_NO> <OBJECT_GODV>01.05.2008</OBJECT_GODV> <OBJECT_MARKA /> <OBJECT_CENNOE>0</OBJECT_CENNOE> <OBJECT_VVOD /> <PRIVATE>13</PRIVATE> <OBJKINDID>6</OBJKINDID> <BAL_INN>42</BAL_INN> <ARXIV /> <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> </OBJECT_6> <OBJECT_6> <NAME>Автоматический анализатор глюкозы и лактата АГМК-01</NAME> <DESTINATION /> <ADRES>г.Владивосток, ул.Русская, 59</ADRES> <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE> <OBJ_NO_BAL>000000000000382</OBJ_NO_BAL> <COMIS_COAST>82000</COMIS_COAST> <CUR_COAST>58000</CUR_COAST> <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE> <OBJECT_IZNOS_PROC>71</OBJECT_IZNOS_PROC> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00014604</OBJ_NO> <OBJECT_GODV>08.12.2008</OBJECT_GODV> <OBJECT_MARKA /> <OBJECT_CENNOE>0</OBJECT_CENNOE> <OBJECT_VVOD /> <PRIVATE>13</PRIVATE> <OBJKINDID>6</OBJKINDID> <BAL_INN>42</BAL_INN> <ARXIV /> <DE_x0024_ACCESS_DATE>2013-04-24T14:20:00+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> </OBJECT_6> СЮДА НУЖНО ДОБАВИТЬ ЗАПИСИ ИЗ EXCEL (3000 штук) тоже OBJECT6 :( <OBJECT_7> <NAME>Автомашина "Лэнд Крузер" Х 567СМ</NAME> <DESTINATION /> <ADRES>г.Владивосток, ул.Русская, 59</ADRES> <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE> <OBJ_NO_BAL>000000000000307</OBJ_NO_BAL> <COMIS_COAST>110000</COMIS_COAST> <CUR_COAST>0</CUR_COAST> <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE> <OBJECT_IZNOS_PROC>100</OBJECT_IZNOS_PROC> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00015808</OBJ_NO> <OBJECT_GODV>01.07.2001</OBJECT_GODV> <OBJECT_DVGNO /> <OBJECT_MARKA /> <OBJECT_KUZOV /> <OBJECT_SHASSI /> <OBJECT_AVTO_KAT /> <OBJECT_GOSNUMBER /> <OBJECT_AVTOCOLOR /> <OBJECT_AVTO_TYPE /> <OBJECT_AVTO_BORT_NO /> <OBJECT_AVTO_ZAVOD_NO /> <OBJECT_CENNOE>1</OBJECT_CENNOE> <PRIVATE>13</PRIVATE> <OBJKINDID>7</OBJKINDID> <ARXIV /> <BAL_INN>42</BAL_INN> <DE_x0024_ACCESS_DATE>2013-04-24T14:20:19+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> </OBJECT_7> <OBJECT_7> <NAME>Автомашина "Нисан-Патрол" К 104 ВУ</NAME> <DESTINATION /> <ADRES>г.Владивосток, ул.Русская, 59</ADRES> <RIGHT_OTHER_TYPE>оперативное управление</RIGHT_OTHER_TYPE> <OBJ_NO_BAL>000000000000308</OBJ_NO_BAL> <COMIS_COAST>170000</COMIS_COAST> <CUR_COAST>0</CUR_COAST> <COAST_DATE>2011-01-01T00:00:00+11:00</COAST_DATE> <OBJECT_IZNOS_PROC>100</OBJECT_IZNOS_PROC> <RIGHT_OTHER_DOC_NO /> <OBJ_NO>00015809</OBJ_NO> <OBJECT_GODV>01.04.1994</OBJECT_GODV> <OBJECT_DVGNO /> <OBJECT_MARKA /> <OBJECT_KUZOV /> <OBJECT_SHASSI /> <OBJECT_AVTO_KAT /> <OBJECT_GOSNUMBER /> <OBJECT_AVTOCOLOR /> <OBJECT_AVTO_TYPE /> <OBJECT_AVTO_BORT_NO /> <OBJECT_AVTO_ZAVOD_NO /> <OBJECT_CENNOE>1</OBJECT_CENNOE> <PRIVATE>13</PRIVATE> <OBJKINDID>7</OBJKINDID> <ARXIV /> <BAL_INN>42</BAL_INN> <DE_x0024_ACCESS_DATE>2013-04-24T14:20:20+11:00</DE_x0024_ACCESS_DATE> <DE_x0024_ADDED_FLAG>0</DE_x0024_ADDED_FLAG> <DE_x0024_MODIFIED_FLAG>0</DE_x0024_MODIFIED_FLAG> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |