![]() |
![]() |
![]() |
|
v7: Выгрузка в XML | ☑ | ||
---|---|---|---|---|
0
Andy120
22.10.11
✎
22:10
|
Добрый вечер. Есть проблемка. Никак не могу сформировать файлик Выгрузки документов в формате XML.
Точнее ника не получается создать его корневой узел у которого в наименовании тега есть знак ":" <?xml version="1.0" encoding="UTF-8"?> <packet:InvoicePacket xmlns:packet="urn:xrm-ru:doc:edi:InvoicePacket:v1.0" xmlns:invoice="urn:xrm-ru:doc:edi:Invoice:v1.0" xmlns:cert="urn:xrm-ru:doc:edi:AcceptanceCertificate:v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:xrm-ru:doc:edi:InvoicePacket:v1.0 ../xsd/InvoicePacket-1.0.xsd urn:xrm-ru:doc:edi:Invoice:v1.0 ../xsd/Invoice-1.0.xsd urn:xrm-ru:doc:edi:AcceptanceCertificate:v1.0 ../xsd/AcceptanceCertificate-1.0.xsd"> ..... </packet:InvoicePacket> Может кто подскажет как побороть..? С XML - столкнулся в первые (( |
|||
1
andrewks
22.10.11
✎
22:14
|
ну, и где не получается?
|
|||
2
Andy120
22.10.11
✎
22:21
|
Пробывал через OpenXML:
Вот кусок кода: Перем xml; //******************************************* Процедура Сформировать() ок=1; tt1=_GetPerformanceCounter(); имяф="c:\Test.xml"; Сообщить("Запись XML-файла: "+имяф); xml.СоздатьФайл(имяф); xml.ЗаписатьТег("<packet:InvoicePacket>"); xml.ЗаписатьТег("<Товары>"); xml.ЗаписатьТег("<Элемент>"); xml.ЗаписатьКомментарий("Комент"); xml.ЗаписатьТег("</Элемент>"); xml.ЗаписатьТег("</Товары>"); xml.ЗаписатьТег("</packet:InvoicePacket>"); xml.ЗакрытьФайл(); tt2=_GetPerformanceCounter(); Сообщить("Время выполнения: "+(tt2-tt1)/1000+" секунд"); КонецПроцедуры Процедура ОбрВыбОказаниеУслуг() КонецПроцедуры //************************************************ Процедура ПриОткрытии() Если ЗагрузитьВнешнююКомпоненту(КаталогБазыДанных() + "\Src\OpenXML.dll")=0 Тогда Сообщить("Не удается загрузить OpenXML.dll !!"); Возврат; КонецЕсли; Попытка xml = СоздатьОбъект("AddIn.OpenXML"); Исключение Сообщить("Не удается создать объект AddIn.OpenXML... !!"); Возврат; КонецПопытки; КонецПроцедуры Говорит "Имя тега дожно заканчиваться >" |
|||
3
VasilyKushnir
22.10.11
✎
22:25
|
(1) +1000 Везде!
|
|||
4
Andy120
22.10.11
✎
22:25
|
А если не ругается, то полученный файлик при просмотре в Explorer-e пустой
|
|||
5
Andy120
22.10.11
✎
22:28
|
Пробывал через XMLDOM... Файлик все равной пустой ((
//******************************************* Процедура СоздатьИЗаписатьXML(ПутьЗаписи) xmlДок = СоздатьОбъект("Microsoft.XMLDOM"); Если ПустоеЗначение(xmlДок) = 0 Тогда //СоздатьXML(СтруктураXML, xmlДок, xmlДок); //PI = xmlДок.createProcessingInstruction("xml", "version=""1.0"""); xmlДок.appendChild(xmlДок.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")); //xmlДок.insertBefore(PI, xmlДок.childNodes.item(0)); КорневойЭлемент = xmlДок.createElement("packet:InvoicePacket"); КорневойЭлемент.setAttribute("xmlns:Table", "urn:www.navision.com/Formats/Table"); КорневойЭлемент.setAttribute("version", "1.0"); xmlДок.appendChild(КорневойЭлемент); Транзакция = xmlДок.createElement("transaction"); Транзакция.setAttribute("version","1.0"); КорневойЭлемент.appendChild(Транзакция); Строчка = xmlДок.createElement("Table:Field"); Строчка.setAttribute("name","ManDate"); Строчка.text = "Проверка текста"; КорневойЭлемент.appendChild(Строчка); xmlДок.save(ПутьЗаписи); xmlДок = 0; Иначе Предупреждение("Не удалось создать XML документ!",10); КонецЕсли; КонецПроцедуры //******************************************* Процедура Сформировать() ПутьБезПробелов = "c:\test03.xml";//СокрЛП(ПутьКXMLФайлу); Если ПустаяСтрока(ПутьБезПробелов) = 0 Тогда Если ФС.СуществуетФайл(ПутьБезПробелов) = 0 Тогда СоздатьИЗаписатьXML(ПутьБезПробелов); Иначе Ответ = Вопрос("Указанный файл существует! |Заменить данный файл?","Да+Нет",5); Если Ответ = "Да" Тогда СоздатьИЗаписатьXML(ПутьБезПробелов); КонецЕсли; КонецЕсли; Иначе Предупреждение("Не задан путь сохранения файла!",5); КонецЕсли; КонецПроцедуры |
|||
6
andrewks
22.10.11
✎
22:32
|
на, изучай.
и почитай ещё про пр-ва имён и схемы. хотя, если лень, можно и так всё вогнать, атрибутами/элементами Функция ВывестиЭлем(ТекЭлем,Знач Смещ); Рез=1; Попытка Если (ТекЭлем.nodeType=1) Тогда Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":","!"); ИначеЕсли (ТекЭлем.nodeType=3) Тогда Сообщить(Смещ+"Текст элемента: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=4) Тогда Сообщить(Смещ+"CDATA: "+ТекЭлем.nodeValue); ИначеЕсли (ТекЭлем.nodeType=8) Тогда Сообщить(Смещ+"Комментарий: "+ТекЭлем.nodeValue,"I"); Иначе Сообщить(Смещ+"Элемент "+ТекЭлем.nodeName+":"); Сообщить(Смещ+"Тип: "+ТекЭлем.nodeType); КонецЕсли; Для ном=0 По ТекЭлем.attributes.length-1 Цикл ТекАтр=ТекЭлем.attributes(ном); Сообщить(Смещ+"Атрибут: "+ТекАтр.nodeName+", значение: "+ТекАтр.nodeValue); КонецЦикла; Исключение Рез=0; КонецПопытки; Смещ=Смещ+" "; Для ном=0 По ТекЭлем.childNodes.length-1 Цикл ДочЭлем=ТекЭлем.childNodes(ном); Рез=Рез*ВывестиЭлем(ДочЭлем,Смещ); КонецЦикла; Возврат Рез; КонецФункции //******************************************* Функция Сформировать() ИмяФайла="D:\1.xml"; Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Узел=ДОМ.CreateProcessingInstruction("xml","version=""1.0"" encoding=""windows-1251"""); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.insertBefore(Узел,); ТекЭлем=ДОМ.appendChild(ДОМ.createElement("Файл")); Текст=ДОМ.createTextNode("Здесь содержимое Файл"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_Файл_1","Здесь содержимое Атрибут_Файл_1"); Комм=ДОМ.createComment("Далее следует содержимое файла"); ТекЭлем.appendChild(Комм); ТекЭлем=ТекЭлем.appendChild(ДОМ.createElement("СодержимоеФайла")); Текст=ДОМ.createTextNode("Здесь содержимое СодержимоеФайла"); ТекЭлем.appendChild(Текст); ТекЭлем.setAttribute("Атрибут_СодержимоеФайла_1","Здесь содержимое Атрибут_СодержимоеФайла_1"); Текст=ДОМ.createCDATASection("Это секция CDATA"); ТекЭлем.appendChild(Текст); ДОМ.save(ИмяФайла); Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.async=0; ДОМ.validateOnParse=-1; ДОМ.resolveExternals=-1; ДОМ.load(ИмяФайла); Если (ДОМ.parseError.errorCode<>0) Тогда // ошибки при проверке валидности Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!"); Возврат 0; КонецЕсли; Рут=ДОМ.documentElement(); Смещ=""; Рез=ВывестиЭлем(Рут,Смещ); Возврат Рез; КонецФункции |
|||
7
Толич
22.10.11
✎
22:35
|
||||
8
Andy120
22.10.11
✎
22:37
|
Спасибо..
|
|||
9
andrewks
22.10.11
✎
22:37
|
(5) этот код даёт не пустой хмл-файл.
проверь, туда ли смотришь |
|||
10
Andy120
22.10.11
✎
22:41
|
(9) При просмотре блокнотом он действительно не пустой, а при просмотре в explorer пустой. Или это нормально?
|
|||
11
andrewks
22.10.11
✎
22:42
|
дык файл-то не валидный получается, потому эксплорер его и не показывает
|
|||
12
Andy120
22.10.11
✎
22:43
|
(11) Что значит "не валидный"
|
|||
13
andrewks
22.10.11
✎
22:45
|
(12) то и значит, валидацию он не проодит
пр-во имён packet у тебя не описано, но употребляется |
|||
14
Andy120
22.10.11
✎
22:46
|
(13) А как его нужно описывать?
|
|||
15
andrewks
22.10.11
✎
22:48
|
(14) ты меня удивляешь. смотри на свой текст в (0)
|
|||
16
Andy120
22.10.11
✎
22:51
|
(15) я понял, что так. Не понятно, как его описать кодом 1С.
|
|||
17
andrewks
22.10.11
✎
23:22
|
(16) не пойму, в чём у тебя затык?
ну пиши тупо так: Попытка ДОМ=СоздатьОбъект("MSXML.DOMDocument"); Узел=ДОМ.CreateProcessingInstruction("xml","version=""1.0"" encoding=""windows-1251"""); Исключение Сообщить("Не удалось создать объект DOMDocument","!"); Возврат 0; КонецПопытки; ДОМ.insertBefore(Узел,); ТекЭлем=ДОМ.appendChild(ДОМ.createElement("packet:InvoicePacket")); ТекЭлем.setAttribute("xmlns:packet","urn:xrm-ru:doc:edi:InvoicePacket:v1.0"); |
|||
18
Andy120
23.10.11
✎
10:01
|
(17) Спасибо... Все сраслось...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |