8.х Программное редактирование XML

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Euronymous, 2 мар 2015.

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Как можно программно изменить 1 атрибут в XML файле? Перепробовал кучу способов, но толку либо 0, либо при работе по схеме приведенной ниже при записи в XML "ФабрикаXDTO.ЗаписатьXML" добавляются лишние теги (или как вариант добавляются при чтении. Пакета XDTO для данного типа документа нет)

    Код:
            ОбъектXML   = Новый ЧтениеXML;
            ОбъектXML.ОткрытьФайл(ПолныйПуть);
            ЭД = ФабрикаXDTO.ПрочитатьXML(ОбъектXML);
            ОбъектXML.Закрыть();
                           
            НоваяЗаписьXML = Новый ЗаписьXML;
            НоваяЗаписьXML.ОткрытьФайл(ПолныйПуть, "UTF-8");
            ЭД.DeliveryNote.FunctionCode = "1";
            ФабрикаXDTO.ЗаписатьXML(НоваяЗаписьXML, ЭД, , , , НазначениеТипаXML.Неявное);
            НоваяЗаписьXML.Закрыть();
  2. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Наткнулся на способ - прочитать файл XML через ЧтениеXML, на его основании сделать новый через ЗаписьXML, перекинуть в новый все данные (разумеется кроме тех которые нужно изменить) и записать новый файл на место старого.
    Есть ли более оптимальные варианты с использованием минимального количества кода?

    P.S. Документ состоит из элементов
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Не понял, а причем здесь фабрика?
    Что за xml?
    Почему не использовать ДокументDOM например?
    Euronymous нравится это.
  4. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Долго не мог въехать как достучаться до нужного элемента, но в итоге проблему решил так)))

    Код:
            ОбъектXML   = Новый ЧтениеXML;
            ОбъектXML.ОткрытьФайл(ПолныйПуть);
            ПостроительDOM = Новый ПостроительDOM;
            ДокументDOM    = ПостроительDOM.Прочитать(ОбъектXML);
            ОбъектXML.Закрыть();
           
            НужныйЭлемент  = ДокументDOM.ПолучитьЭлементыПоИмени("FunctionCode")[0];
            НужныйЭлемент.ТекстовоеСодержимое = "1";
           
            ЗаписьXML = Новый ЗаписьXML;
            ЗаписьXML.ОткрытьФайл(ПолныйПуть);
            ЗаписьDOM = Новый ЗаписьDOM;
            ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
            ЗаписьXML.Закрыть();

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