Имя: Пароль:
1C
 
Добавление в XML новых строк
0 Niel_84
 
31.05.26
11:02
Добрый день. Помогите, пожалуйста, разобраться...

    
	Данные = ПолучитьИзВременногоХранилища(Хранилище);
	Расширение = ".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"));
		КонецЕсли;
	КонецЦикла;

	СписокЭлементовDOMДопСведТов = ДокументDOM.ПолучитьЭлементыПоИмени("ДопСведТов");
	Для Каждого ЭлементDOM Из СписокЭлементовDOMДопСведТов Цикл
		Если ЭлементDOM.ЕстьАтрибут("КодТов") Тогда
			
			Атрибут = ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("КодТов").Значение;
			
			GTIN = НайтиGTIN(Атрибут);
			ЭлементGTIN = ДокументDOM.СоздатьЭлемент("ИнфПолФХЖ2");
			Элемент.УстановитьАтрибут("GTIN", ЭлементGTIN);
			
			//как добавить в существующий файл строку
			//<ИнфПолФХЖ2 Идентиф="GTIN" Значен="00000000000000" />
			//после <ИнфПолФХЖ2 Идентиф="ID товара" Значен="000000000" />
			//то есть должно быть так:
			//<ИнфПолФХЖ2 Идентиф="ID товара" Значен="000000000" /
			//<ИнфПолФХЖ2 Идентиф="GTIN" Значен="00000000000000" />			
			
			KIZ = НайтиKIZ(Атрибут);

			Для Каждого Строка Из KIZ Цикл
				СписокЭлементовDOMДопСведТов.Добавить(Элемент);
				Элемент.УстановитьАтрибут("КИЗ",Строка);

				//как в существующим файле изменить строку:
				//<ДопСведТов КодТов="00-0000" />
				//на ниже следующее(конструкция <ДопСведТов КодТов="00-0000" /> 
				//имеет закрывающий тег /, его нужно убрать и поставить в конце </ДопСведТов>):
					//<ДопСведТов КодТов="00-0000">
	 				//	<НомСредИдентТов>
	   				//		<КИЗ>0000000000000000000000000000000</КИЗ>
					//		<КИЗ>0000000000000000000000000000000</КИЗ>
					//		<КИЗ>0000000000000000000000000000000</КИЗ>
					//		<КИЗ>0000000000000000000000000000000</КИЗ>
					  //	</НомСредИдентТов>
					//</ДопСведТов>
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла, "windows-1251");	
	ЗаписьDOM = Новый ЗаписьDOM;
	ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
	
	ЗаписьXML.Закрыть();

Заранее всем спасибо.
1 Chameleon1980
 
31.05.26
11:28
ну блин.
что у тебя есть сейчас?
ПостроительDOM
вернее ДокументDOM потом
смотри его методы
добавляй и записывай обратно
наверное так да
голову никто не хочет включать?
где код украл?
2 Niel_84
 
31.05.26
11:59
(1) это мой код

например в этом месте
СписокЭлементовDOMФайл = ДокументDOM.ПолучитьЭлементыПоИмени("Файл");
    Для Каждого ЭлементDOM Из СписокЭлементовDOMФайл Цикл
        Если ЭлементDOM.ЕстьАтрибут("ИдФайл") Тогда
            ЭлементDOM.УстановитьАтрибут("ИдФайл",СтрЗаменить((ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("ИдФайл").Значение),"_0_0_0_0_0_00", "_0_1_0_0_0_00"));
        КонецЕсли;
    КонецЦикла;
получается
вторая строка была:
Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

стала
<Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema"

Подскажите, пожалуйста, что не так почему изменилась с xmlns:xsi на xmlns:xsd и обрезало адрес.
3 Niel_84
 
31.05.26
12:32
(2)     СписокЭлементовDOMДопСведТов = ДокументDOM.ПолучитьЭлементыПоИмени("ДопСведТов");
    Для Каждого ЭлементDOM Из СписокЭлементовDOMДопСведТов Цикл
        Если ЭлементDOM.ЕстьАтрибут("КодТов") Тогда
            
            Атрибут = ЭлементDOM.Атрибуты.ПолучитьИменованныйЭлемент("КодТов").Значение;    
            
            KIZ = НайтиKIZ(Атрибут);
            
            Для Каждого Строка Из KIZ Цикл
                
                ЭлементDOM.УстановитьАтрибут("КИЗ",Строка);
                
                //в данном случае было:
                //<ДопСведТов КодТов="00-0000" />

                //стало:
                //<ДопСведТов КодТов="00-0000" КИЗ="0000000000000000000000000000000"/>
                
                //а надо:
                //<ДопСведТов КодТов="00-0000">
                //    <НомСредИдентТов>
                //        <КИЗ>0000000000000000000000000000000</КИЗ>
                //        <КИЗ>0000000000000000000000000000000</КИЗ>
                //        <КИЗ>0000000000000000000000000000000</КИЗ>
                //        <КИЗ>0000000000000000000000000000000</КИЗ>
                //    </НомСредИдентТов>
                //</ДопСведТов>
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
4 Волшебник
 
31.05.26
18:48
Очень много нулей...
5 Волшебник
 
31.05.26
18:49
очень много комментариев...
6 Волшебник
 
31.05.26
18:49
Скажите, что Вы хотите от мисты?
7 Garykom
 
гуру
31.05.26
18:56
СериализаторXDTO вероятно хочет
8 Волшебник
 
31.05.26
19:10
(7) 👍
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан