Имя: Пароль:
1C
1C 7.7
v7PLUS и XML - помогите собрать элемент
0 ik
 
12.03.12
21:47
v7PLUS и XML - как собрать конструкцию вида
<nt first second>текст</nt>
--
Фрагмент:
мЗаписьXML.ОткрытьЭлемент("start");                                                            
мЗаписьXML.ВключитьЭлемент("String1",Строка);
//Вот тут надо <nt first second>TEXT</nt>
мЗаписьXML.ВключитьЭлемент("String4",Строка);
мЗаписьXML.ЗакрытьЭлемент();
1 andrewks
 
12.03.12
22:16
мой тебе совет - не используй v7+. используй msxml без лишних обёрток
2 andrewks
 
12.03.12
22:19

Функция ВывестиЭлем(ТекЭлем,Знач Смещ);
   
   Рез=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();
   Смещ="";
   Рез=ВывестиЭлем(Рут,Смещ);
   
   Возврат Рез;
КонецФункции

Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший