8.х Пространство имён

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

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток, столкнулся со следующей проблемой.

    Загружаю XML файл в 1С, читаю его, редактирую и после чего выгружаю обратно в файл.
    Во время произведения данных процедур вылетает пространство имён xmlns="http://www.w3schools.com", скорее всего это происходит при работе через ЗаписьXML.
    Что необходимо сделать чтобы это пространство не вылетало? (Перезаписывать или повторно добавлять его ну ни в коем случае нельзя.)

    Код:
    Код:
        Расширение = "";
        НаименованиеФайла  = Объект.Наименование + "_" + СокрЛП(Объект.Ссылка.УникальныйИдентификатор());
        Соглашение = Ссылка.СоглашениеЭД;
        Если ЗначениеЗаполнено(Соглашение) Тогда
            АдресКаталога  = Соглашение.РесурсИсходящихЭЦП;
            ДанныеФайла    = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Объект.Ссылка);
            ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
            Расширение = ?(Прав(НаименованиеФайла, 3) <> "xml", ".xml", "");
            НаименованиеФайлаРед = КаталогВременныхФайлов() + НаименованиеФайла + Расширение;
            ДвоичныеДанные.Записать(НаименованиеФайлаРед);
                  
            Попытка      
                ОбъектXML = Новый ЧтениеXML;
                ОбъектXML.ОткрытьФайл(НаименованиеФайлаРед);
                ПостроительDOM = Новый ПостроительDOM;  
                ДокументDOM    = ПостроительDOM.Прочитать(ОбъектXML);
                ОбъектXML.Закрыть();
              
                SenderID  = ДокументDOM.ПолучитьЭлементыПоИмени("SenderID")[0];
                SenderID.ТекстовоеСодержимое = "222";
                ReceiverID = ДокументDOM.ПолучитьЭлементыПоИмени("ReceiverID")[0];
                ReceiverID.ТекстовоеСодержимое = "111";  
              
                ЗаписьXML = Новый ЗаписьXML;
                ЗаписьXML.ОткрытьФайл(НаименованиеФайлаРед);
                ЗаписьDOM = Новый ЗаписьDOM;
                ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
                ЗаписьXML.Закрыть();
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
            ПолныйПуть = АдресКаталога + НаименованиеФайла + Расширение;
            КопироватьФайл(НаименованиеФайлаРед, ПолныйПуть);
            Возврат ПолныйПуть;
        КонецЕсли;  
    
  2. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Пока что проблему решил обрабатывая документ как текст: через СтрЗаменить() редактирую нужные моменты. Но это бред полнейший, есть ли более адекватные методы редактирования XML файла без удаления пространства имён?
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Пространство имен задается для ЗаписьXML. В синтаксис-помощнике есть описание метода.
  4. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Это через вот это вот? ЗаписатьСоответствиеПространстваИмен(<Префикс>, <URIПространстваИмен>)
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Ага. По умолчанию какое-то там стандартное ставится.
  6. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Проблема в том что имеется XML документ, состоящий из двух больших блоков. Блок №1 можно менять как угодно, блок №2 имеет ЭЦП, следовательно менять его никак нельзя.
    Пространство имён имеется в двух блоках, но после получения документа, редактирования его блока №1 и последующей записи 1С удаляет пространство как раз в подписанном блоке №2, т.е. подпись уже нарушена и документ можно выкинуть.
    И правильно ли я понимаю что описанный ниже механизм тоже будет менять этот XML документ? Следовательно подпись опять будет нарушена...

    ЗаписатьСоответствиеПространстваИмен(<Префикс>, <URIПространстваИмен>);

    Описание:
    Записывает соответствие префикса и URI пространства имен. Данный метод должен вызываться после обращения к методу ЗаписьXML.ЗаписатьНачалоЭлемента и до записи вложенных элементов и текста элемента. Соответствие действует в рамках текущего элемента и всех вложенных.

  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    Так понимаю, вам нужно так же разделять один документ на 2 при формировании, а потом их как-то сливать в один.
    Еще не плохо было бы погялдеть, каким образом формируется файл с несколькими пространствами имен.
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    эм... а как можно подписать только половину документа?
  9. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Вообще при формировании просто дважды прописываю Файл.ЗаписатьАтрибут("xmlns", "http://www.w3schools.com"); и всё отрабатывает ок.
    Но сейчас я этот документ не формирую, а получаю. Формируется он непонятно где, как и кем.
    Загружаю в 1С, редактирую и выгружаю обратно и в момент выгрузки происходит удаление пространства имён из подписанного блока.
    --- Объединение сообщений, 18 июл 2016 ---
    Не знаю. Подписывает сторонний софт и со слов разработчиков не подписанную часть можно и нужно менять при обработке в 1С, а вторую часть никак нельзя редактировать.
Похожие темы
  1. Чандра
    Ответов:
    6
    Просмотров:
    664
Загрузка...

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