7.7 XML через V7PLUS.DLL

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем dima_home, 17 мар 2010.

  1. TopicStarter Overlay
    dima_home
    Offline

    dima_home

    Регистрация:
    29 дек 2009
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    При создании XML файла с использованием V7PLUS.DLL
    например:
    Код:
    Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
    Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
    Предупреждение("Компонента v7plus.dll не найдена!");
    КонецЕсли;
    КонецЕсли;
    
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    xmlКорень=Анализатор.СоздатьДокумент();
    xmlДанные=xmlКорень.СоздатьПодчиненныйЭлемент("Данные");
    xmlэлемент=xmlДанные.СоздатьПодчиненныйЭлемент("Элемент");
    xmlэлемент.Значение="строковые данные 1";
    xmlэлемент=xmlДанные.СоздатьПодчиненныйЭлемент("Элемент");
    xmlэлемент.Значение="строковые данные 2";
    xmlКорень.Записать("D:\tempxml.xml")
    
    
    Если открыть файл XML он будет одной строкой...весь интернет перерыл но не нашел как сделать чтоб каждый элемент дерева начинался с новой строки.
    Может кто в курсе поскажите.
    Заранее спасибо.
    :unsure:
  2. ЧКДзержинский
    Offline

    ЧКДзержинский Опытный в 1С

    Регистрация:
    7 дек 2006
    Сообщения:
    487
    Симпатии:
    3
    Баллы:
    29
    Только что тупо скопировал твой код, запустил, открыл файл и получил данные в виде дерева:
    <?xml version="1.0" encoding="windows-1251" ?>
    - <Данные>
    <Элемент>строковые данные 1</Элемент>
    <Элемент>строковые данные 2</Элемент>
    </Данные>
  3. TopicStarter Overlay
    dima_home
    Offline

    dima_home

    Регистрация:
    29 дек 2009
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    а чем открыл...вот у меня...блокнотом смотрю
    Код:
    <?xml version="1.0" encoding="windows-1251"?>
    <Данные><Элемент>строковые данные 1</Элемент><Элемент>строковые данные 2</Элемент></Данные>
    
    
  4. TopicStarter Overlay
    dima_home
    Offline

    dima_home

    Регистрация:
    29 дек 2009
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Нашел решение....верне подсмотрел у 1С шников...они не прямиком пишут XML в файл а перез V7TextFile

    Код:
    Процедура ЗаписатьУзелВФайл(РезФайл, ХМЛУзел, СтрокаТабуляции)
    КоличПодчиненных = ХМЛУзел.КоличествоПодчиненных();
    Если КоличПодчиненных = 1 Тогда
    КоличПодчиненныхПодчиненного = ХМЛУзел.ПолучитьПодчиненныйПоНомеру(1).КоличествоПодчиненных();
    Иначе
    КоличПодчиненныхПодчиненного = 1;
    КонецЕсли;
    Если КоличПодчиненныхПодчиненного = 0 Тогда
    ЗаписываемаяСтрока = СтрокаТабуляции + ХМЛУзел.ПредставлениеXML();          
    РезФайл.ЗаписатьСтроку(ЗаписываемаяСтрока);
    Иначе   
    ЗаписываемаяСтрока = СтрокаТабуляции + "<" + ХМЛУзел.Наименование + ">";       
    РезФайл.ЗаписатьСтроку(ЗаписываемаяСтрока);
    Для Сч = 1 По КоличПодчиненных Цикл
    ЗаписатьУзелВФайл(РезФайл, ХМЛУзел.ПолучитьПодчиненныйПоНомеру(Сч), СтрокаТабуляции+СимволТабуляции);
    
    КонецЦикла;
    ЗаписываемаяСтрока = СтрокаТабуляции + "</" + ХМЛУзел.Наименование + ">";       
    РезФайл.ЗаписатьСтроку(ЗаписываемаяСтрока);
    КонецЕсли;
    КонецПроцедуры 
    //*******************************************
    Процедура Сформировать()  
    
    Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
    Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
    Предупреждение("Компонента v7plus.dll не найдена!");
    КонецЕсли;
    КонецЕсли;
    
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    xmlКорень=Анализатор.СоздатьДокумент();
    xmlДанные=xmlКорень.СоздатьПодчиненныйЭлемент("Данные");
    xmlэлемент=xmlДанные.СоздатьПодчиненныйЭлемент("Элемент");  
    xmlэлемент.Значение="строковые данные 1";  
    xmlэлемент=xmlДанные.СоздатьПодчиненныйЭлемент("Элемент");
    xmlэлемент.Значение="строковые данные 2";
    
    
    РезФайл		=	СоздатьОбъект("AddIn.V7TextFile");
    РезФайл.ОткрытьФайл("D:\tempxml.xml", 1);
    РезФайл.ЗаписатьСтроку("<?xml version=""1.0"" encoding=""windows-1251""?>");
    
    
    Данные = xmlКорень.ВыбратьУзел("Данные");
    РезФайл.ЗаписатьСтроку("<Данные>");
    Для Сч = 1 По Данные.КоличествоПодчиненных() Цикл
    ЗаписатьУзелВФайл(РезФайл, Данные.ПолучитьПодчиненныйПоНомеру(Сч),СимволТабуляции);                                   
    КонецЦикла;
    РезФайл.ЗаписатьСтроку("</Данные>");
    РезФайл.ЗакрытьФайл();
    
    
    
    
    //xmlКорень.Записать("D:\tempxml.xml")
    
    КонецПроцедуры
    
    
    Если открыть файл XML он будет уже несколькими строками, как надо.
    Если кто знает решение не через эту з...у, то прошу подсказать мне.
    Хотя я думаю или уж в 1С пишут так, значит действительно бибилиотека не работает.
  5. ЧКДзержинский
    Offline

    ЧКДзержинский Опытный в 1С

    Регистрация:
    7 дек 2006
    Сообщения:
    487
    Симпатии:
    3
    Баллы:
    29
    Я открываю либо при помощи Internet Explorer либо Opera
  6. TopicStarter Overlay
    dima_home
    Offline

    dima_home

    Регистрация:
    29 дек 2009
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    эксплоер действительно открывает как надо...но если открыть в блокноте...все в одну строку. ((
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Это стандартный вид.
    Ничем не поправишь.
    Ищи редакторы, с поддержкой синтаксисов, может поможет.

Поделиться этой страницей