Работа с XML документам

1. _7445_ 22.07.20 16:06 Сейчас в теме
Доброе времени суток.

Есть ХМЛ документ который хранить данные документа. ХМЛ отправляется из мобильного приложение (Интеграция). Короче в файла есть такая строка -
<CashOrders>
		<CashOrder ID="1" Type="2" Date="15.07.2020 09:55:05" UserID="1" CustomerID="2" Amount="10.0" IsDeleted="0" Comment="" DateString="15.07.2020 09:55:05" Exported="1" Guid="d8fc0902-75c6-4c37-a154-f32108494f4f" Cancelled="0" Printed="0" DeviceId="cc1bcadc973177ce"/> 


Меня надо добавить еще одну информацию (наименование пользователя). С помощью СОМ объекта могу делать но не тот результат получаю. Добавляю, удаляю атрибут но... Можете помогать? Спасибо всем за ранее.

Надо так -
<CashOrders>
		<CashOrder ID="1" Type="2" Date="15.07.2020 09:55:05" UserID="1" UserName="Test" CustomerID="2" Amount="10.0" IsDeleted="0" Comment="" DateString="15.07.2020 09:55:05" Exported="1" Guid="d8fc0902-75c6-4c37-a154-f32108494f4f" Cancelled="0" Printed="0" DeviceId="cc1bcadc973177ce"/> 



XML = Новый COMОбъект("MSXML2.DOMDocument");
XML.Load(XML_Документ);

//Получаем корневой элемент
Root = XML.DocumentElement;
	
FirstElement = Root.ChildNodes(1);
		
ElementsCount = FirstElement.ChildNodes.Length;
	
Для Стр = 0 По ElementsCount - 1 Цикл
		UserID = FirstElement.ChildNodes(Стр).Attributes.GetNamedItem("UserID").text;
		//Вот здесь надо писать 
КонецЦикла;
	 
	 //Сохраняем весь документ
 XML.Save("D:\Optima\Test.xml")
Показать
По теме из базы знаний
Найденные решения
5. _7445_ 24.07.20 15:45 Сейчас в теме
(3)
Спасибо за вниманию.
Этот код который вы писали по-моему ищут тот атрибут который уже находиться в документе. Но мне надо было добавить новый атрибут в текущем элемента.
Первый очередь создал новый атрибут потом добавил его в необходимый элемент. Использовал метод "setAttributeNode" для добавление атрибута.
Хороший сайт, показывает все методы и функции для работа с XML DOM Документам - XML DOM Document.
Может кому-то пригодиться полный код -
Процедура ДобавитьНеобходимыеДанныеДляПланаОбмена(XML_Документ)

	XML = Новый COMОбъект("MSXML2.DOMDocument");
	XML.Load(XML_Документ);
	
	Root = XML.DocumentElement; 
	
	FirstElement = Root.ChildNodes(1); 
	
	ElementsCount = FirstElement.ChildNodes.Length;
	
	Для Стр = 0 По ElementsCount - 1 Цикл
		
		newAttr = xml.createAttribute("UserName");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
		
		newAttr = xml.createAttribute("UserCashBox");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Касса.Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
		
		newAttr = xml.createAttribute("UserStock");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Склад.Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
				
	КонецЦикла;
	
	XML.Save("D:\Test\Test.xml");
КонецПроцедуры
Показать

Спасибо всем.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VictorRGB2 14 22.07.20 18:49 Сейчас в теме
не верно
не получится дописать в читаемый xml что-то

надо сначала все прочитать, сформировать или таблицу или структуру прочитанных данных
в процессе чтения добавить к данным требуемый атрибут со значением
закрыть чтение

только потом записать все заново в новый файл или в тот же с перезаписью
4. _7445_ 24.07.20 15:32 Сейчас в теме
(2) Спасибо за вниманию.
3. Bazin 5 23.07.20 06:36 Сейчас в теме
Для Стр = 0 По ElementsCount - 1 Цикл
	//UserID = FirstElement.ChildNodes(Стр).Attributes.GetNamedItem("UserID").text;
	FirstElement.ChildNodes(Стр).Attributes.GetNamedItem("UserID").text = "123454456456";
КонецЦикла;
5. _7445_ 24.07.20 15:45 Сейчас в теме
(3)
Спасибо за вниманию.
Этот код который вы писали по-моему ищут тот атрибут который уже находиться в документе. Но мне надо было добавить новый атрибут в текущем элемента.
Первый очередь создал новый атрибут потом добавил его в необходимый элемент. Использовал метод "setAttributeNode" для добавление атрибута.
Хороший сайт, показывает все методы и функции для работа с XML DOM Документам - XML DOM Document.
Может кому-то пригодиться полный код -
Процедура ДобавитьНеобходимыеДанныеДляПланаОбмена(XML_Документ)

	XML = Новый COMОбъект("MSXML2.DOMDocument");
	XML.Load(XML_Документ);
	
	Root = XML.DocumentElement; 
	
	FirstElement = Root.ChildNodes(1); 
	
	ElementsCount = FirstElement.ChildNodes.Length;
	
	Для Стр = 0 По ElementsCount - 1 Цикл
		
		newAttr = xml.createAttribute("UserName");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
		
		newAttr = xml.createAttribute("UserCashBox");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Касса.Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
		
		newAttr = xml.createAttribute("UserStock");
		newAttr.value = Справочники.Сотрудники.НайтиПоКоду(FirstElement.ChildNodes(Стр).attributes.getNamedItem("UserID").text).Склад.Наименование;
		FirstElement.ChildNodes(Стр).setAttributeNode(newAttr);
				
	КонецЦикла;
	
	XML.Save("D:\Test\Test.xml");
КонецПроцедуры
Показать

Спасибо всем.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот