1.
Hr1zantema
30.05.26 17:08
Сейчас в теме
Добрый день. Осуществляю замену атрибута в XML файле и записываю в тот же файл.
вторая строка была:
Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
стала
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Подскажите, пожалуйста, что не так почему изменилась с xmlns:xsi на xmlns:xsd и обрезало адрес.
Данные = ПолучитьИзВременногоХранилища(Хранилище);
Расширение = ".xml";
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
Данные.Записать(ИмяВременногоФайла);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
ЧтениеXML.Закрыть();
СписокЭлементовDOM = ДокументDOM.ПолучитьЭлементыПоИмени("Файл");
Для Каждого ЭлементDOM Из СписокЭлементовDOM Цикл
Если ЭлементDOM.ЕстьАтрибут("ИдФайл") Тогда
ЭлементDOM.УстановитьАтрибут("ИдФайл",СтрЗаменить((ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("ИдФайл").Значение),"_0_0_0_0_0_00", "_0_1_0_0_0_00"));
КонецЕсли;
КонецЦикла;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла, "windows-1251");
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();
Показатьвторая строка была:
Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
стала
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Подскажите, пожалуйста, что не так почему изменилась с xmlns:xsi на xmlns:xsd и обрезало адрес.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
4.
Hr1zantema
31.05.26 12:51
Сейчас в теме
(2)
подскажите, пожалуйста, как надо сделать?
СписокЭлементовDOMДопСведТов = ДокументDOM.ПолучитьЭлементыПоИмени("ДопСведТов");
Для Каждого ЭлементDOM Из СписокЭлементовDOMДопСведТов Цикл
Если ЭлементDOM.ЕстьАтрибут("КодТов") Тогда
Атрибут = ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("КодТов").Значение;
KIZ = НайтиKIZ(Атрибут);
Для Каждого Строка Из KIZ Цикл
ЭлементDOM.УстановитьАтрибут("КИЗ",Строка);
//в данном случае было:
//<ДопСведТов КодТов="00-0000" />
//стало:
//<ДопСведТов КодТов="00-0000" КИЗ="0000000000000000000000000000000"/>
//а надо:
//<ДопСведТов КодТов="00-0000">
// <НомСредИдентТов>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// </НомСредИдентТов>
//</ДопСведТов>
КонецЦикла;
КонецЕсли;
КонецЦикла;
подскажите, пожалуйста, как надо сделать?
СписокЭлементовDOMДопСведТов = ДокументDOM.ПолучитьЭлементыПоИмени("ДопСведТов");
Для Каждого ЭлементDOM Из СписокЭлементовDOMДопСведТов Цикл
Если ЭлементDOM.ЕстьАтрибут("КодТов") Тогда
Атрибут = ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("КодТов").Значение;
KIZ = НайтиKIZ(Атрибут);
Для Каждого Строка Из KIZ Цикл
ЭлементDOM.УстановитьАтрибут("КИЗ",Строка);
//в данном случае было:
//<ДопСведТов КодТов="00-0000" />
//стало:
//<ДопСведТов КодТов="00-0000" КИЗ="0000000000000000000000000000000"/>
//а надо:
//<ДопСведТов КодТов="00-0000">
// <НомСредИдентТов>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// <КИЗ>0000000000000000000000000000000</КИЗ>
// </НомСредИдентТов>
//</ДопСведТов>
КонецЦикла;
КонецЕсли;
КонецЦикла;
(4) Ваш код сделал всё так, как было написано - вставил 4 атрибута с одинаковым именем "КИЗ", которые свернулись в один.
Имя атрибута в составе элемента должно быть уникальным. Повторяющимися могут быть только элементы.
Если Вы хотите сделать "то, что надо" -
- в каждый элемент ДопСведТов в цикле
- вставьте один дополнительный элемент НомСредИдентТов без атрибутов
- вставьте в него в цикле необходимое количество дополнительных элементов КИЗ с соответствующими текстовыми значениями (не атрибутами!)
Имя атрибута в составе элемента должно быть уникальным. Повторяющимися могут быть только элементы.
Если Вы хотите сделать "то, что надо" -
- в каждый элемент ДопСведТов в цикле
- вставьте один дополнительный элемент НомСредИдентТов без атрибутов
- вставьте в него в цикле необходимое количество дополнительных элементов КИЗ с соответствующими текстовыми значениями (не атрибутами!)
16.
Hr1zantema
03.06.26 07:49
Сейчас в теме
(5) Доброе утро.
Подскажите, пожалуйста, как сделать так:
<СведТов НомСтр="1" НаимТов="ЧЧЧЧЧ" ОКЕИ_Тов="00" НаимЕдИзм="шт" КолТов="1" ЦенаТов="0.00" СтТовБезНДС="0.20" НалСт="22%" СтТовУчНал="0.00">
<ДопСведТов КодТов="85-0058">
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
</ДопСведТов>
У меня сейчас выходит вот так:
<СведТов НомСтр="1" НаимТов="ЧЧЧЧЧ" ОКЕИ_Тов="00" НаимЕдИзм="шт" КолТов="1" ЦенаТов="0.00" СтТовБезНДС="0.20" НалСт="22%" СтТовУчНал="0.00">
<ДопСведТов КодТов="00-0000">
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
</ДопСведТов>
Делаю вот так:
Подскажите, пожалуйста, как сделать так:
<СведТов НомСтр="1" НаимТов="ЧЧЧЧЧ" ОКЕИ_Тов="00" НаимЕдИзм="шт" КолТов="1" ЦенаТов="0.00" СтТовБезНДС="0.20" НалСт="22%" СтТовУчНал="0.00">
<ДопСведТов КодТов="85-0058">
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
</ДопСведТов>
У меня сейчас выходит вот так:
<СведТов НомСтр="1" НаимТов="ЧЧЧЧЧ" ОКЕИ_Тов="00" НаимЕдИзм="шт" КолТов="1" ЦенаТов="0.00" СтТовБезНДС="0.20" НалСт="22%" СтТовУчНал="0.00">
<ДопСведТов КодТов="00-0000">
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
<НомСредИдентТов>
<КИЗ>0000000000000000000000</КИЗ>
</НомСредИдентТов>
</ДопСведТов>
Делаю вот так:
СписокЭлементов_ДопСведТов = ДокументDOM.ПолучитьЭлементыПоИмени("ДопСведТов");
Для Каждого Элемент_ДопСведТов Из СписокЭлементов_ДопСведТов Цикл
Если Элемент_ДопСведТов.ЕстьАтрибут("КодТов") Тогда
Атрибут = Элемент_ДопСведТов.Атрибуты.ПолучитьИменованныйЭлемент("КодТов").Значение;
Отбор.Вставить("Артикул", Атрибут);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);
Если НайденныеСтроки <> Неопределено Тогда
Для Каждого Строка Из НайденныеСтроки Цикл
Если Строка.Артикул = Атрибут и ЗначениеЗаполнено(Строка.KIZ) Тогда
//создаем новые элементы
НомСредИдентТов = ДокументDOM.СоздатьЭлемент("НомСредИдентТов");
КИЗ = ДокументDOM.СоздатьЭлемент("КИЗ");
//добавляем уровень НомСредИдентТов
Элемент_ДопСведТов.ДобавитьДочерний(НомСредИдентТов);
//находим ветку НомСредИдентТов
СписокЭлементов_НомСредИдентТов = ДокументDOM.ПолучитьЭлементыПоИмени("НомСредИдентТов");
Для Каждого Элемент_НомСредИдентТов Из СписокЭлементов_НомСредИдентТов Цикл
//добавляем уровень КИЗ
Элемент_НомСредИдентТов.ДобавитьДочерний(КИЗ);
//находим ветку КИЗ
СписокЭлементов_КИЗ = ДокументDOM.ПолучитьЭлементыПоИмени("КИЗ");
Для Каждого Элемент_КИЗ Из СписокЭлементов_КИЗ Цикл
Элемент_КИЗ.ТекстовоеСодержимое = Строка.KIZ;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла; Показать
(4)
Код
устанавливает атрибут КИЗ в элемент.
Тут КИЗ атрибут.
Если надо не атрибутом это, а элементом, надо создавать элемент и добавлять в нужное место.
НовыйЭлемент = ДокументDOM.СоздатьЭлемент(имя);
А потом добавить в нужное место.
Код
ЭлементDOM.УстановитьАтрибут("КИЗ",Строка);
устанавливает атрибут КИЗ в элемент.
//стало:
//<ДопСведТов КодТов="00-0000" КИЗ="0000000000000000000000000000000"/>
//<ДопСведТов КодТов="00-0000" КИЗ="0000000000000000000000000000000"/>
Тут КИЗ атрибут.
Если надо не атрибутом это, а элементом, надо создавать элемент и добавлять в нужное место.
НовыйЭлемент = ДокументDOM.СоздатьЭлемент(имя);
А потом добавить в нужное место.
3.
Hr1zantema
31.05.26 12:46
Сейчас в теме
файлы приложить не могу - конфиденциальная информация в них.
Изменение только во второй строке
Было:
<?xml version="1.0" encoding="windows-1251"?>
<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ИдФайл="XXXX_0_0_0_0_0_00" ВерсФорм="5.03" ВерсПрог="Platform">
Стало:
<?xml version="1.0" encoding="windows-1251"?>
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="XXXX_0_1_0_0_0_00" ВерсФорм="5.03" ВерсПрог="Platform">
не понятно почему обрезало и изменилось xmlns:xsi.
будет ли это влиять при загрузке
Изменение только во второй строке
Было:
<?xml version="1.0" encoding="windows-1251"?>
<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ИдФайл="XXXX_0_0_0_0_0_00" ВерсФорм="5.03" ВерсПрог="Platform">
Стало:
<?xml version="1.0" encoding="windows-1251"?>
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="XXXX_0_1_0_0_0_00" ВерсФорм="5.03" ВерсПрог="Platform">
не понятно почему обрезало и изменилось xmlns:xsi.
будет ли это влиять при загрузке
11.
starik-2005
3274
01.06.26 13:35
Сейчас в теме
Зачем усложнять?
Текст = ПрочитатьТекст(ИмяФайла);
Текст = СтрЗаменить(Текст, "00_00_00_1", "01_00_00_1");
ЗаписатьТекст(Текст)
13.
starik-2005
3274
01.06.26 14:25
Сейчас в теме
(12)
А вдруг там
Регулярка спасет отцов и матерей иностранных легионов...
14.
user_2202820
01.06.26 14:41
Сейчас в теме
(13)
Регулярка
Я, когда хочу избавится от вопрошаюшего, тоже так делаю. Он уходит и успешно взрывает себе мозг самостоятельно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот