Имя: Пароль:
1C
1C 7.7
V7plus.dll Как отформатировать xml-текст
0 planod
 
29.03.12
10:34
пришлось подвыучить эту компоненту для создания xml-файла. В итоге получается приличный Xml. но не отформатированный, то есть в одну строку. Как можно произвести форматирование текста. Хотя бы использованием табуляции.
1 Рэйв
 
29.03.12
10:35
Вроде всегда само переносило строки.
2 planod
 
29.03.12
10:40
(1) может, что я неправильно делаю... Вот код:

Номер = 123;
Анализатор = СоздатьОбъект("AddIn.XMLParser");
КореньДокумента = Анализатор.СоздатьДокумент();
ДанныеДокумента = КореньДокумента.СоздатьПодчиненныйЭлемент("ДанныеДокумента");
Сотрудник = ДанныеДокумента.СоздатьПодчиненныйЭлемент("Сотрудник");
    НомерУзел = Сотрудник.СоздатьПодчиненныйЭлемент("Номер");
    НомерУзел.Значение = Номер;
КореньДокумента.Записать(КаталогИБ()+"12345.xml");
3 Mnemonic1C
 
29.03.12
10:43
(2) А смотришь чем после записи?
4 planod
 
29.03.12
10:44
notepad ++
5 Mnemonic1C
 
29.03.12
10:45
(4) Запиши пустышку, посмотри "правильный" хмл, найди отличия, я так и делаю
6 Vinianel
 
29.03.12
10:46
(4) XML Notepad попробуй.
7 Гость2
 
29.03.12
10:47
(0) Посмотри ИнтернетЭксплоером
8 planod
 
29.03.12
10:49
(5)(6)(7) спасибо за советы) через браузер все гораздо нагляднее)
9 andrewks
 
29.03.12
10:51
V7plus - глючная вещь
10 planod
 
29.03.12
10:52
(9) а альтернативы тогда?
11 Ёпрст
 
29.03.12
10:53
(10) любой DomDocument - в разы быстрее и не свалится на больших xml
12 andrewks
 
29.03.12
10:56
(10) держи примерчик


Функция ВывестиЭлем(ТекЭлем,Знач Смещ);
   
   Рез=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";
   
   Попытка
       ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0");
       Узел=ДОМ.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(ИмяФайла);
   
   Попытка
       ДОМ=СоздатьОбъект("MSXML2.DOMDocument.6.0");
   Исключение
       Сообщить("Не удалось создать объект DOMDocument","!");
       Возврат 0;
   КонецПопытки;
   
   ДОМ.async=0;
   ДОМ.validateOnParse=-1;
   ДОМ.resolveExternals=-1;
   ДОМ.load(ИмяФайла);
   
   Если (ДОМ.parseError.errorCode<>0) Тогда
       // ошибки при проверке валидности

       Сообщить("При проверке валидности файла "+ИмяФайла+" выявлены ошибки!","!");
       Возврат 0;
   КонецЕсли;

   Рут=ДОМ.documentElement();
   Смещ="";
   Рез=ВывестиЭлем(Рут,Смещ);
   
   Возврат Рез;
КонецФункции

13 planod
 
29.03.12
11:02
MSXML2.DOMDocument.6.0 - это встроенная в 1с компонента?
14 Ёпрст
 
29.03.12
11:03
(13) :)
нет
15 planod
 
29.03.12
11:10
(14) ТО есть я её также должен ЗагрузитьВнешнююКомпоненту() ?
16 andrewks
 
29.03.12
11:12
(15) :) нет
17 planod
 
29.03.12
11:16
(16) блин, расскажите технологию тогда)
18 andrewks
 
29.03.12
11:17
(17) я тебе целый рабочий пример дал
19 planod
 
29.03.12
11:23
(18) за это спасибо большое, но хочется узнать, MSXML2.DOMDocument.6.0 - это встроенная компонента или нет, надо ли её где-нибудь устанавливать/прописывать?
20 Гость2
 
29.03.12
11:28
(19) "Встроенная" в винду   :-)
21 Ёпрст
 
29.03.12
11:30
22 Ёпрст
 
29.03.12
11:31
а то мало ли.. у тя 2-ой или токма 4..й
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан