Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 30
.NET 4.x

Объединение двух файлов XML по ключам

23.03.2016, 05:48. Показов 3242. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два файла XML:

zap.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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>

Большое спасибо всем за помощь...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2016, 05:48
Ответы с готовыми решениями:

Объединение 2 xml файлов по ключу в 1 xml с использованием linq
День добрый. Я уже отписывался в другой теме с объединением 2 xml, но увы тот метод для меня слишком сложен. Видел на форумах ребята...

Неверное объединение XML файлов
итак, нужно брать из одной папки по 5 xml файлов, имя которых начинается не на &quot;!&quot;, объединять их и сохранять в другой папке. при этом...

Объединение нескольких XML файлов
есть папка, где хранится неизвестное число файлов *.xml. нужно объединять в один файл части пяти файлов (не весь файл, а его часть от...

9
 Аватар для ITALIANEZ
57 / 56 / 17
Регистрация: 28.07.2009
Сообщений: 201
23.03.2016, 09:35
А что именно вызывает у вас проблему? Десериализуйте ваши XML. Сравните и объедините полученные коллекции. Сериализуйте обратно в XML.
0
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 30
23.03.2016, 11:26  [ТС]
Дело в том что я совсем новичок. И мне трудно работать с xml, а надо(((.
0
 Аватар для ITALIANEZ
57 / 56 / 17
Регистрация: 28.07.2009
Сообщений: 201
23.03.2016, 11:43
Почитайте в учебниках примеры сериализации и десиарилзации. Или же примеры типа LinqToXML. там подобные примеры есть. Ничего сложного там нет. Просто данные описаны и сохранены в XML. Вам нужно просто их считать, отфильтровать, обработать, а затем получить итоговый набор, который обратно упакуется в тот же XML.
0
22 / 22 / 13
Регистрация: 11.08.2015
Сообщений: 69
23.03.2016, 12:04
Вот
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
 
namespace zip
{
 
    public class Program
    {
        static zap.dataroot _zap;
        static pacient.dataroot _pacient;
        public static void Main()
        {
            _zap = Deserialize<zap.dataroot>("c:\\1.xml");
            _pacient = Deserialize<pacient.dataroot>("c:\\2.xml");
            var rez = new Class1.dataroot();
            rez.ZAP = (from zap in _zap.ZAP
                        join pacient in _pacient.PACIENT on zap.ID_PAC equals pacient.ID_PAC
                        select new Class1.datarootZAP()
                        {
                            ID_PAC = zap.ID_PAC,
                            N_ZAP = zap.N_ZAP,
                            PR_NOV = zap.PR_NOV,
                            PACIENT = new Class1.datarootZAPPACIENT()
                            {
                                ID_PAC = pacient.ID_PAC,
                                NOVOR = pacient.NOVOR,
                                SMO_OK = pacient.SMO_OK,
                                VPOLIS = pacient.VPOLIS
                            }
                        }).ToArray();
            Serialize<Class1.dataroot>("c:\\3.xml", rez);
 
 
        }
        private static T Deserialize<T>(string path) 
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            FileStream fs = new FileStream(path, FileMode.Open);
            XmlReader reader = XmlReader.Create(fs);
            var rez = (T)serializer.Deserialize(reader);
            fs.Close();
            return rez;
        }
        private static void Serialize<T>(string path,T data)
        {
            XmlSerializer serializer =  new XmlSerializer(typeof(T));
            TextWriter writer = new StreamWriter(path);
            serializer.Serialize(writer, data);
            writer.Close();
        }
    }
}
Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
public class Class1
{
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class dataroot
    {
 
        private datarootZAP[] zAPField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("ZAP")]
        public datarootZAP[] ZAP
        {
            get
            {
                return this.zAPField;
            }
            set
            {
                this.zAPField = value;
            }
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public class datarootZAP
    {
 
        private byte n_ZAPField;
 
        private byte pR_NOVField;
 
        private ushort iD_PACField;
 
        private datarootZAPPACIENT pACIENTField;
 
        /// <remarks/>
        public byte N_ZAP
        {
            get
            {
                return this.n_ZAPField;
            }
            set
            {
                this.n_ZAPField = value;
            }
        }
 
        /// <remarks/>
        public byte PR_NOV
        {
            get
            {
                return this.pR_NOVField;
            }
            set
            {
                this.pR_NOVField = value;
            }
        }
 
        /// <remarks/>
        public ushort ID_PAC
        {
            get
            {
                return this.iD_PACField;
            }
            set
            {
                this.iD_PACField = value;
            }
        }
 
        /// <remarks/>
        public datarootZAPPACIENT PACIENT
        {
            get
            {
                return this.pACIENTField;
            }
            set
            {
                this.pACIENTField = value;
            }
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public class datarootZAPPACIENT
    {
 
        private ushort iD_PACField;
 
        private byte vPOLISField;
 
        private uint sMO_OKField;
 
        private byte nOVORField;
 
        /// <remarks/>
        public ushort ID_PAC
        {
            get
            {
                return this.iD_PACField;
            }
            set
            {
                this.iD_PACField = value;
            }
        }
 
        /// <remarks/>
        public byte VPOLIS
        {
            get
            {
                return this.vPOLISField;
            }
            set
            {
                this.vPOLISField = value;
            }
        }
 
        /// <remarks/>
        public uint SMO_OK
        {
            get
            {
                return this.sMO_OKField;
            }
            set
            {
                this.sMO_OKField = value;
            }
        }
 
        /// <remarks/>
        public byte NOVOR
        {
            get
            {
                return this.nOVORField;
            }
            set
            {
                this.nOVORField = value;
            }
        }
    }
 
 
}
Добавлено через 19 секунд
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class zap
{
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class dataroot
    {
 
        private datarootZAP[] zAPField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("ZAP")]
        public datarootZAP[] ZAP
        {
            get
            {
                return this.zAPField;
            }
            set
            {
                this.zAPField = value;
            }
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public class datarootZAP
    {
 
        private byte n_ZAPField;
 
        private byte pR_NOVField;
 
        private ushort iD_PACField;
 
        /// <remarks/>
        public byte N_ZAP
        {
            get
            {
                return this.n_ZAPField;
            }
            set
            {
                this.n_ZAPField = value;
            }
        }
 
        /// <remarks/>
        public byte PR_NOV
        {
            get
            {
                return this.pR_NOVField;
            }
            set
            {
                this.pR_NOVField = value;
            }
        }
 
        /// <remarks/>
        public ushort ID_PAC
        {
            get
            {
                return this.iD_PACField;
            }
            set
            {
                this.iD_PACField = value;
            }
        }
    }
}
Добавлено через 15 секунд
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
public class pacient
{
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public class dataroot
    {
 
        private datarootPACIENT[] pACIENTField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("PACIENT")]
        public datarootPACIENT[] PACIENT
        {
            get
            {
                return this.pACIENTField;
            }
            set
            {
                this.pACIENTField = value;
            }
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public class datarootPACIENT
    {
 
        private ushort iD_PACField;
 
        private byte vPOLISField;
 
        private uint sMO_OKField;
 
        private byte nOVORField;
 
        /// <remarks/>
        public ushort ID_PAC
        {
            get
            {
                return this.iD_PACField;
            }
            set
            {
                this.iD_PACField = value;
            }
        }
 
        /// <remarks/>
        public byte VPOLIS
        {
            get
            {
                return this.vPOLISField;
            }
            set
            {
                this.vPOLISField = value;
            }
        }
 
        /// <remarks/>
        public uint SMO_OK
        {
            get
            {
                return this.sMO_OKField;
            }
            set
            {
                this.sMO_OKField = value;
            }
        }
 
        /// <remarks/>
        public byte NOVOR
        {
            get
            {
                return this.nOVORField;
            }
            set
            {
                this.nOVORField = value;
            }
        }
    }
 
 
}
0
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 14
20.11.2017, 15:29
День добрый. Очень полезный ответ что вы дали и очень интересный, однако можно вопрос. В строке
C#
1
var rez = (T)serializer.Deserialize(reader);
программа прерывается со следующей ошибкой
В документе XML (2, 2) присутствует ошибка.
Подскажите в чем причина?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
20.11.2017, 15:49
Цитата Сообщение от boombas Посмотреть сообщение
Подскажите в чем причина?
Смотрите Inner Exception, там будет больше информации.
0
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 14
21.11.2017, 11:24
Цитата Сообщение от Cupko Посмотреть сообщение
Смотрите Inner Exception, там будет больше информации.
{"<ZL_LIST xmlns=''> не ожидался."}

Добавлено через 18 часов 26 минут
Есть мысли на этот счет?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
21.11.2017, 11:41
boombas, есть простая мысль - открыть XML документ в текстовом редакторе, найти строку <ZL_LIST xmlns= в указанной строке и подумать почему десериализатор на неё ругается.
0
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 14
21.11.2017, 14:34
Цитата Сообщение от OwenGlendower Посмотреть сообщение
boombas, есть простая мысль - открыть XML документ в текстовом редакторе, найти строку <ZL_LIST xmlns= в указанной строке и подумать почему десериализатор на неё ругается.
Да вы правы. Спасибо за подсказку, буду исправлять ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2017, 14:34
Помогаю со студенческими работами здесь

Объединение двух файлов
Даны два двоичных файла с числами. Получить новый файл, в котором на четных местах будут стоять компоненты, которые стоят на четных местах...

Объединение двух файлов
Пусть даны файлы, созданные по условию предыдущего задания. Выпол- ните объединение двух файлов: из соответствующих двух строк входных...

Объединение двух файлов
Два текстовых файла A1.TXT, A2.TXT содержат целые числа (32-разрядные знаковые значения), отсортированные в порядке возрастания. Номера...

Объединение нескольких XML файлов в один с группировкой, используя XSLT
Всем привет. Помогите разобраться в следующей задаче: есть несколько XML файлов, в которых хранятся данные каждого из отчета...

Объединение двух бинарных файлов
Как сделать программу которая считывает числа (упорядоченные по возрастанию) из двух бинарных файлов f и g, и сливает их в один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru