Редактирование файла xml
Всем добрый день!
Сейчас пишу интеграционный механизм для 1С с приложением, у которого данные хранятся в xml формате.
При определенных условиях необходимо программно заменить значение атрибута
например: <атрибут>1234</атрибут> нужно поменять на <атрибут>2345</атрибут>
Подскажите пожалуйста, как это можно реализовать?
2 день бьюсь над этой проблемой...
Сейчас пишу интеграционный механизм для 1С с приложением, у которого данные хранятся в xml формате.
При определенных условиях необходимо программно заменить значение атрибута
например: <атрибут>1234</атрибут> нужно поменять на <атрибут>2345</атрибут>
Подскажите пожалуйста, как это можно реализовать?
2 день бьюсь над этой проблемой...
По теме из базы знаний
- Формирование файла типа xml для формализованных электронных передаточных и корректировочных документов и неформализованного электронного документа Счет на основании документа бухгалтерии
- Загрузка документов из товароучетного ПО: 1С Розница 2.2/2.3 в 1С Бухгалтерия 3.0 в файловом формате XML
- Конвертация файлов 1С
- Чтение примечаний из файла с расширением «docx» без применения COM-объекта
- Анализ прикрепленных файлов – УТ 11.5, КА 2.5, ЕРП 2.5
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Текст = Новый ЧтениеТекста("C:\файл.xml", КодировкаТекста.UTF8);
Строка=СтрЗаменить(Текст.Прочитать(),"<атрибут>1234</атрибут>","<атрибут>2345</атрибут>");
Текст = Новый ЗаписьТекста("C:\файл.xml", КодировкаТекста.UTF8);
Текст.Записать(Строка);
Текст.Закрыть();
(6) Поддерживаю... если только сейчас не выяснится, что заменять надо не во всем файле, а в отдельных местах, в зависимости от ХЗ знает чего - например, от значения других атрибутов.
На это намекает "При определенных условиях" в (1) - подробности, видимо, надо выпытывать... шампуром? :-)
Автор, если предложенный коллегой метод вас устраивает - поздравляю! А если нет, то поймите и усвойте на будущее: "Краткость, конечно, сестра таланта... но не единственная!"
На это намекает "При определенных условиях" в (1) - подробности, видимо, надо выпытывать... шампуром? :-)
Автор, если предложенный коллегой метод вас устраивает - поздравляю! А если нет, то поймите и усвойте на будущее: "Краткость, конечно, сестра таланта... но не единственная!"
(3)
И вообще, лучше покажите то, над чем "2 день бьетесь" - вам скорее подскажут, где ошибки и как исправить.
А то телепаты все на шашлыках, жарят... кого надо. ;-)
мне программно надо
Программно где? В файле? Или в базе 1С? Программный код при этом будет отличаться, вам не кажется?
И вообще, лучше покажите то, над чем "2 день бьетесь" - вам скорее подскажут, где ошибки и как исправить.
А то телепаты все на шашлыках, жарят... кого надо. ;-)
(4) Вот именно, что показывать особо нечего. Не могу понять, как записывать.
В файле надо изменять значение атрибута
Пишу внешнюю обработку в самой 1С
То есть файл xml программно открывается в 1С, ищется нужный атрибут с нужным значением и дальше записывается в файле xml и закрывается
логика примерно такая
есть же, наверное, алгоритмы какие-то для изменения значения...я ж не первая такое пробую писать))
Пока находит и читает вот так:
Осталось понять, как записывать...
Про шашлыки шутка - зачет :D
В файле надо изменять значение атрибута
Пишу внешнюю обработку в самой 1С
То есть файл xml программно открывается в 1С, ищется нужный атрибут с нужным значением и дальше записывается в файле xml и закрывается
логика примерно такая
есть же, наверное, алгоритмы какие-то для изменения значения...я ж не первая такое пробую писать))
Пока находит и читает вот так:
ЧтениеXML = Новый XMLReader;
ЧтениеXML .SetString(локОбъектXML.xml);
Пока ЧтениеXML .Read() Цикл
Если ЧтениеXML .ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Пока ЧтениеXML .ПрочитатьАтрибут() Цикл
Если ЧтениеXML .Имя = "id_i" Тогда
ИД = ЧтениеXML .Значение;
КонецЕсли;
Если ИД = ID Тогда
Если ЧтениеXML .Имя = "id_e" Тогда
ЧтениеXML .Значение = ГУИД;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПоказатьОсталось понять, как записывать...
Про шашлыки шутка - зачет :D
(7) К сожалению этот вариант не устраивает...
у меня нет файла xml в таком виде
Это по сути своего рода БД из этих xml состоит
Получаю на чтение таким вот образом файл:
у меня нет файла xml в таком виде
Это по сути своего рода БД из этих xml состоит
Получаю на чтение таким вот образом файл:
ЗапросДолжности = ПолучитьДолжности();
ОбъектXML = СоздатьОбъектXML(ЗапросДолжности);
Соединение.GetData(ОбъектXML);
ЧтениеXML = Новый XMLReader;
ЧтениеXML .SetString(ОбъектXML .xml);
ПостроительДОМ = Новый ПостроительDOM;
ДокументДОМ = ПостроительДОМ.Прочитать(ЧтениеXML );
ЧтениеXML .Закрыть();
ОбходДереваDOM = Новый ОбходДереваDOM(ДокументДОМ);
ОбходДереваDOM.СледующийУзел();
УзелDOM = ОбходДереваDOM.СледующийУзел();
Для каждого Строка Из УзелDOM.ДочерниеУзлы Цикл
Для каждого Атрибут Из Строка.Атрибуты Цикл
Если Атрибут.ИмяУзла = "id_i" И Атрибут.ЗначениеУзла = ID Тогда
СтрНайдена = Строка.Атрибуты[3];
СтрНайдена.Значение = Строка(ГУИД);
СтрНайдена.ЗначениеУзла = Строка(ГУИД);
//Тут должна быть запись текущей строки
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
(19) Прошу )
Спасибо Вам всем за помощь!
Выручаете того, кто ни разу не работал с такими вещами)))
Спасибо Вам всем за помощь!
Выручаете того, кто ни разу не работал с такими вещами)))
Попытка
ОбъектXML = Новый COMObject("MSXML2.DOMDocument.3.0");
ОбъектXML.loadXML(СтрокаXML);
Исключение
ОбъектXML = Неопределено;
КонецПопытки;
Возврат ОбъектXML;
(17) У тебя и не получится. Надо учить и понимать технологии и средства их реализации, а не искать волшебную строчку, чтобы скопипастить.
Открываешь xml на чтение и тут же копию на запись. Переносишь в циклах из одного в другое. Если при чтении обнаруживаешь нужное состояние - подправляешь данные, которые пишутся. Потом используешь результат записи
Можно еще xslt преобразование попробовать.
Открываешь xml на чтение и тут же копию на запись. Переносишь в циклах из одного в другое. Если при чтении обнаруживаешь нужное состояние - подправляешь данные, которые пишутся. Потом используешь результат записи
Можно еще xslt преобразование попробовать.
(20) Я первый раз столкнулась с таким... Вы тоже поймите, что я хочу учиться, стараюсь и учусь у Вас, умных и опытных специалистов :)
На курсах всего не дают...
Вот и пытаюсь разобраться и понять, как это всё работает) мне таких сложных задач не прилетало ещё)
Все приходит с опытом))
Про xslt не слышала, почитаю) Благодарю Вас!)
На курсах всего не дают...
Вот и пытаюсь разобраться и понять, как это всё работает) мне таких сложных задач не прилетало ещё)
Все приходит с опытом))
Про xslt не слышала, почитаю) Благодарю Вас!)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот