Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2016, 05:55   #1
exivmaks
Пользователь
 
Регистрация: 03.03.2015
Сообщений: 10
По умолчанию Объединение дву XML по ключам

Есть два файла XML:

zap.xml


Код:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot>
<ZAP>
<N_ZAP>1</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20266</ID_PAC>
</ZAP>
<ZAP>
<N_ZAP>2</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20348</ID_PAC>
</ZAP>
<ZAP>
<N_ZAP>3</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20562</ID_PAC>
</ZAP>
<ZAP>
<N_ZAP>4</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20797</ID_PAC>
</ZAP>
</dataroot>
и pacient.xml


Код:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot>
<PACIENT>
<ID_PAC>20266</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
<PACIENT>
<ID_PAC>20348</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
<PACIENT>
<ID_PAC>20562</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
<PACIENT>
<ID_PAC>20797</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
</dataroot>
Ключевое поле ID_PAC.
Помогите программно объединить эти файлы что бы в результате получить вот такой файл:


Код:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot>
<ZAP>
<N_ZAP>1</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20266</ID_PAC>
 <PACIENT>
<ID_PAC>20266</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
</ZAP>
<ZAP>
<N_ZAP>2</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20348</ID_PAC>
<PACIENT>
<ID_PAC>20348</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
</ZAP>
<ZAP>
<N_ZAP>3</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20562</ID_PAC>
<PACIENT>
<ID_PAC>20562</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
</ZAP>
<ZAP>
<N_ZAP>4</N_ZAP>
<PR_NOV>0</PR_NOV>
<ID_PAC>20797</ID_PAC>
<PACIENT>
<ID_PAC>20797</ID_PAC>
<VPOLIS>3</VPOLIS>
<SMO_OK>76000</SMO_OK>
<NOVOR>0</NOVOR>
</PACIENT>
</ZAP>
</dataroot>
Большое спасибо всем за помощь...
exivmaks вне форума Ответить с цитированием
Старый 23.03.2016, 20:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Смотрите, проще всего загрузить их в XmlDocument.
и объединить по ключам.
Код:
var zapXml=new XmlDocument();
var pacientXml=new XmlDocument();
zapXml.Load("zap.xml");
pacientXml.Load("pacient.xml");
var zapDict=zapXml.SelectNodes("/dataroot/ZAP/ID_PAC").ToDictionary(a=>a.InnerText,a=>a.ParentNode);
var pacientDict=pacientXml.SelectNodes("/dataroot/PACIENT/ID_PAC").ToDictionary(a=>a.InnerText,a=>a.ParentNode);
foreach(var inter in zapDict.Keys.Intersect(pacientDict.Keys))
{
    zapDict[inter].AppendChild(pacientDict[inter]);
}
zapXml.Save("new.xml");
примерно так, код писал тут, но смысл должен быть ясен.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неверное объединение xml файлов МаксМСК C# (си шарп) 1 17.10.2014 14:17
по ключам не правильно считает ) Black_Wolf Общие вопросы Delphi 2 23.12.2012 19:44
Объединение нескольких Xml Crunkordie Общие вопросы Delphi 3 28.03.2011 17:02
Вопрос по ключам Регистра Vognedar Общие вопросы Delphi 2 03.07.2008 14:48