Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232

Соединение XML файлов в один

04.07.2023, 13:06. Показов 1967. Ответов 38

Студворк — интернет-сервис помощи студентам
Подскажите как можно соединить два XDocument. Сам XML в них схожий по структуре так как это выгрузка за разные периоды. Но первая проблема - мы заранее не знаем, что там за xml, какие у него теги. Во вторых нет гарантии, что 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="WINDOWS-1251"?>
<Export _ThreadName="Архив" _DateTime="">
  <контейнер1 _Link="" _Product="Инвентарная книга регистрации дубликатов КД" _Type="Инвентарная книга">
    <данные3 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные3>
    <данные4 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
    </данные4>
</контейнер1>
</Export>
 
 
<?xml version="1.0" encoding="WINDOWS-1251"?>
<Export _ThreadName="Архив" _DateTime="">
  <контейнер1 _Link="" _Product="Инвентарная книга регистрации дубликатов КД" _Type="Инвентарная книга">
    <данные11 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные11>
</контейнер1>
</Export>
 
Нужно соединить так:
 
<?xml version="1.0" encoding="WINDOWS-1251"?>
<Export _ThreadName="Архив" _DateTime="">
  <контейнер1 _Link="" _Product="Инвентарная книга регистрации дубликатов КД" _Type="Инвентарная книга">
    <данные3 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные3>
    <данные4 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
    </данные4>
    <данные11 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные11>
</контейнер1>
</Export>
А если будут такие, то соединять не надо.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="WINDOWS-1251"?>
<Export _ThreadName="Архив" _DateTime="">
  <контейнер1 _Link="" _Product="Инвентарная книга регистрации дубликатов КД" _Type="Инвентарная книга">
    <данные3 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные3>
    <данные4 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
    </данные4>
</контейнер1>
</Export>
 
<Export _ThreadName="Архив" _DateTime="">
<контейнер2 _Link="" _Product="Инвентарная книга электронных копий бумажных подлинников КД" _Type="Инвентарная книга">
    <данные11 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные11>
</контейнер2>
</Export>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2023, 13:06
Ответы с готовыми решениями:

Не получатся записать данные из нескольких xml файлов в один
Здравствуйте , подскажите пожалуйста как можно переписать данные из нескольких xml файлов в один. Я пишу так но он ничего не копирует у...

Соединение нескольких файлов в один
Всем привет. Прошу помощи. Имеем 30 файлов эксель одинаковой структуры (разное только количество строк) их нужно собрать в 1 эксель фаил....

Обьединить несколько xml файлов в один
Подскажите возможно ли обьединение 2 xml файлов в 1 вот есть структура 1 файла &lt;Node&gt; &lt;SubNode&gt; &lt;D /&gt; ...

38
HF
 Аватар для HF
1340 / 924 / 202
Регистрация: 09.09.2011
Сообщений: 2,748
Записей в блоге: 2
05.07.2023, 12:46
Студворк — интернет-сервис помощи студентам
Если я был программист, то я бы сделал вообще без размышления о структуре в XML.
Десериализуем все XML в объекты. Группируем, сортируем в коде, так как хочется и требуется. Потом сериализуем. Должен получиться нужный XML.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 12:48
Цитата Сообщение от HF Посмотреть сообщение
Десериализуем все XML в объекты.
Так надо знать во что десериализовать... В объекты какого типа...
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
05.07.2023, 13:00  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Я же уже выше говорил - данные не имеют вложенных элементов!
Я понимаю, я уже писал, что с точки зрения xml вы правы. Конечно если в тег, что-то вложено, то это контейнер. Но если абстрагироваться, то я имею ввиду под данными(у которых есть вложения) объекты. Ну то есть контейнер для этой задачи это то место, где хранятся объекты или данные. Где данные это теги без вложенностей, объекты это совокупность этих данных.

Добавлено через 2 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
Я же уже выше говорил - данные не имеют вложенных элементов!
Я понимаю, я уже писал, что с точки зрения xml вы правы. Конечно если в тег, что-то вложено, то это контейнер. Но если абстрагироваться, то я имею ввиду под данными(у которых есть вложения) объекты. Ну то есть контейнер для этой задачи это то место, где хранятся объекты или данные. Где данные это теги без вложенностей, объекты это совокупность этих данных.
Цитата Сообщение от iLinks Посмотреть сообщение
Вы и не поймете, т.к. уровень "контейнера" теперь тоже разный может быть. Можно конечно и существование "body" обработать, не брать его в расчет, но вы сейчас подкинете еще что-нибудь
В этом и сложность, что мы не знаем какая вложенность и прийти может какой угодно xml.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:01
KopHack,
Ищем контейнеры и данные:
Метод:
C#
1
2
3
4
5
6
7
8
9
10
11
static void DumpXml(XElement element, int level)
{
    if (element.HasElements)
    {
        Console.WriteLine("{0} {1}", "Контейнер:", element.Name);
        foreach (var child in element.Elements())
            DumpXml(child, level + 1);
    }
    else
        Console.WriteLine("{0} {1}", "Данные:", element.Name);
}
Поиск:
C#
1
2
3
4
5
6
var doc = XDocument.Load(@"3.xml");
 
foreach (XElement element in doc.Elements())
{
    DumpXml(element, 4);
}
Вывод:
Code
1
2
3
4
5
6
Контейнер: Export
Контейнер: ИКПодлинниковИИ
Контейнер: ИКМС.468367.179_П
Данные: БД_ИКМС.468367.179
Контейнер: ИКМС.468367.179ВП_П
Данные: БД_ИКМС.468367.179ВП
Я нашел все контейнеры и определил где данные...
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
05.07.2023, 13:09  [ТС]
Сейчас такой момент, подскажите как можно решить эту задачу:
Code
1
2
3
4
5
Проверяем каждый уровень вложенности 
если у файлов он совпадает
то проваливаемся на следующий уровень
как только находим не совпадения возвращаемся наверх (подразумеваем, что пошли данные)
на этом моменте нужно понять соединять или нет (понять это контейнер или как в случае с body "шапка")
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:12
Цитата Сообщение от KopHack Посмотреть сообщение
как в случае с body "шапка"
body ни какая не "шапка", это такой же контейнер. Их может быть хоть 100 штук, но он(и) не содержат параметров (данных), что легко определяется мои кодом выше.
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
05.07.2023, 13:13  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Контейнер: Export
Контейнер: ИКПодлинниковИИ
Контейнер: ИКМС.468367.179_П
Данные: БД_ИКМС.468367.179
Контейнер: ИКМС.468367.179ВП_П
Данные: БД_ИКМС.468367.179ВП
Это отлично, но в таком виде не понятно как соединять. В какой контейнер. Здесь нужно в Контейнер: ИКПодлинниковИИ добавлять какие-то ещё из второго xml. Но как это объяснить программе.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:20
Цитата Сообщение от KopHack Посмотреть сообщение
Но как это объяснить программе.
Это уже второй шаг. Отделять мух от котлет мы теперь можем, надо реализовать сравнение двух файлов и поиск того, что нужно добавить.

Добавлено через 1 минуту
P.S.
level + 1 пока не нужен, по задумке он для ограничения поиска в глубину, в документе, но наверное не нужно оно.
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
05.07.2023, 13:25  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
body ни какая не "шапка", это такой же контейнер. Их может быть хоть 100 штук, но он(и) не содержат параметров (данных), что легко определяется мои кодом выше.
Вы меня не понимаете. Давайте на примере:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Export _DateTime="" _ThreadName="Архив">
<body>
  <ИКПодлинниковИИ>
    <ИКМС.468367.179_П>
      <БД_ИКМС.468367.179/>
    </ИКМС.468367.179_П>
    <ИКМС.468367.179ВП_П>
      <БД_ИКМС.468367.179ВП/>
    </ИКМС.468367.179ВП_П>
    <ИКМС.468367.183ВС_П>
      <БД_ИКМС.468367.183ВС/>
    </ИКМС.468367.183ВС_П>
  </ИКПодлинниковИИ>
</body>
</Export>
XML
1
2
3
4
5
6
7
8
9
10
11
12
<Export _DateTime="" _ThreadName="Архив">
<body>
  <ИКПодлинникКД>
    <ИКМС.468367.179_П>
      <БД_ИКМС.468367.179/>
    </ИКМС.468367.179_П>
    <ИКМС.468367.179ВП_П>
      <БД_ИКМС.468367.179ВП/>
    </ИКМС.468367.179ВП_П>
  </ИКПодлинниковКД>
</body>
</Export>
Шапкой я называю те теги которые повторяются у всех файлов, даже которые не нужно соединять.
Как вот в xml (которые рабочие) тег Export. Понятно, что он root, но может же быть, что после него будет ещё (как в примере который я привожу в этом сообщении). И тогда body тоже будет в части шапки. И я не понимаю как определить эту шапку, если я заранее не могу знать какой xml придёт. Шапку нужно игнорировать.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:29
Цитата Сообщение от KopHack Посмотреть сообщение
И тогда body тоже будет в части шапки. И я не понимаю как определить эту шапку, если я заранее не могу знать какой xml придёт. Шапку нужно игнорировать.
KopHack, Это ВООБЩЕ не проблема! Хоть шапка, хоть панамкой назови. С точки зрения структуры - это контейнер.
Если "лишние" контейнеры надо игнорировать, то легко выкинуть их при скрещивании документов.
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,342
05.07.2023, 13:29
Цитата Сообщение от KopHack Посмотреть сообщение
Шапку нужно игнорировать
Как я вам уже говорил, чтобы это было возможно, нужно знать все эти "шапки"+ее отсутствие.
0
2 / 2 / 0
Регистрация: 21.10.2019
Сообщений: 232
05.07.2023, 13:31  [ТС]
И если эту подзадачу решить, то после шапки можно просто проверять следующий тег и если он одинаковый, то соединять, если разный, то нет.

Добавлено через 1 минуту
Цитата Сообщение от wizard41 Посмотреть сообщение
KopHack, Это ВООБЩЕ не проблема! Хоть шапка, хоть панамкой назови. С точки зрения структуры - это контейнер.
Если "лишние" контейнеры надо игнорировать, то легко выкинуть их при скрещивании документов.
Можете код прислать, чтобы избавиться от шапки и рассматривать только нужное?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:33
"Рабочим" контейнером назовем такой контейнер, внутри которого могут быть тоже контейнеры, но с данными. Первый же верхний уровень - НЕ содержащий данных - есть их общий контейнер, который должен присутствовать в другом документе.

Добавлено через 1 минуту
Цитата Сообщение от KopHack Посмотреть сообщение
Можете код прислать, чтобы избавиться от шапки и рассматривать только нужное?
Дико стучать по клавиатуре я не буду, занят еще побочными делами. По ходу продвижения буду скидывать код для проверки...
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,342
05.07.2023, 13:47
Набросал тоже на основе примера wizard41
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
static void DumpXml(XElement element, int level)
{
    if (level > 1)
    {
        Console.WriteLine("{0} {1}", "Данные:", element.Name);
        foreach (var child in element.Elements())
            DumpXml(child, level + 1);
    }
    else if (element == element.Document.Root)
    {
        foreach (var child in element.Elements())
            DumpXml(child, level + 1);
    }
    else
    {
        if(element.Name == "body")
        {
            foreach (var child in element.Elements())
                DumpXml(child, level);
        }
        else
        {
            Console.WriteLine("{0} {1}", "Контейнер:", element.Name);
            foreach (var child in element.Elements())
                DumpXml(child, level + 1);
        }
    }
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 13:55
Цитата Сообщение от iLinks Посмотреть сообщение
if(element.Name == "body")
Так нельзя. Мы не знаем заранее какое имя будет.
Алгоритм примерно такой: нужно добраться до контейнеров с данными и вычленить их, независимо от того, сколько уровней вложенности перед ними. Самый "глубокий" контейнер, содержащий контейнеры с данными и будет являться "корневым" для них. Все предыдущие контейнеры, исключая корневой - удаляются.
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,342
05.07.2023, 14:39
wizard41, так я же думал, что "шапки" эти известны будут. Если искоренять все лишнее, можно так попробовать:
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
/// <summary>
/// Двигаемся "вверх" от данных пока не найдем родительский контейнер, у которого в дочерних только один контейнер
/// этот самый "один контейнер" наш нужный контейнер, в котором все остальное "данные"
/// </summary>
static XElement MoveUpXml(XElement element)
{
    if (element.HasElements && element.Parent.Elements().Count() == 1)
    {
        Console.WriteLine("{0} {1}", "Контейнер:", element.Name);
        return element;
    }
    else
    {
        return MoveUpXml(element.Parent);
    }
}
/// <summary>
/// Движемся в глубь, пока не найдем данные
/// </summary>
static XElement MoveInDepthXml(XElement element)
{
    if (element.HasElements)
    {
        foreach (var child in element.Elements())
        {
            return MoveInDepthXml(child);
        } 
    }
    else
    {
        Console.WriteLine("{0} {1}", "Данные:", element.Name);
        return MoveUpXml(element);
    }
    return null;
}
public static void Main(string[] args)
{
    var doc = XDocument.Load(@"3.xml");
    var targetContainer = MoveInDepthXml(doc.Root);
    doc.Root.RemoveAll();
    //получили документ, в котором выпилили все лишнее после рута
    //и оставили только один контейнер с данными
    doc.Root.Add(targetContainer);
    Console.ReadLine();
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 15:22
Цитата Сообщение от iLinks Посмотреть сообщение
можно так попробовать:
неа. Сохраняются только первые встреченные данные. Вторых нет, а второго под-контейнера с данными тем более.

Добавлено через 22 минуты
iLinks, вот сюда можно добавить функционал "запоминания" предыдущих контейнеров:
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
class MyXmlParser
{
    readonly List<string> containers = new();
    readonly Dictionary<string, List<string>> dict = new();
 
    public void DumpXml(XElement element)
    {
        if (element.HasElements)
        {
            containers.Add(element.Name.ToString());
            foreach (var child in element.Elements())
                DumpXml(child);
        }
        else
        {
            if (!dict.ContainsKey(containers[^1].ToString()))
                dict.Add(containers[^1], new List<string> { element.Name.ToString() });
            else dict[containers[^1].ToString()].Add(element.Name.ToString());
        }
    }
 
    public void Reset()
    {
        containers.Clear();
        dict.Clear();
    }
 
    public override string ToString()
    {
        string s = string.Empty;
        foreach (KeyValuePair<string, List<string>> kvp in dict)
        {
            s += "Контейнер: <" + kvp.Key + ">\nДанные:\n";
            foreach (var data in kvp.Value)
                s += "   " + data + "\n";
        }
        return s;
    }
}
C#
1
2
3
4
5
6
7
var doc = XDocument.Load(@"1.xml");
MyXmlParser mxmlp = new();
 
foreach (XElement element in doc.Elements())
    mxmlp.DumpXml(element);
Console.WriteLine(mxmlp);
Console.Read();
Code
1
2
3
4
5
6
7
Контейнер: <данные3>
Данные:
   данные1
   данные2
Контейнер: <данные4>
Данные:
   данные1
Добавлено через 55 секунд
Это для этого файла:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<Export _ThreadName="Архив" _DateTime="">
  <контейнер1 _Link="" _Product="Инвентарная книга регистрации дубликатов КД" _Type="Инвентарная книга">
    <данные3 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
      <данные2 _Link="Состоит из ..."/>
    </данные3>
    <данные4 _Link="Состоит из ..." >
      <данные1 _Link="Состоит из ..."/>
    </данные4>
</контейнер1>
</Export>


Добавлено через 1 минуту
Для такого:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<Export _DateTime="" _ThreadName="Архив">
  <ИКПодлинниковИИ>
    <ИКМС.468367.179_П>
      <БД_ИКМС.468367.179/>
    </ИКМС.468367.179_П>
    <ИКМС.468367.179ВП_П>
      <БД_ИКМС.468367.179ВП/>
    </ИКМС.468367.179ВП_П>
  </ИКПодлинниковИИ>
</Export>

соответствующий вывод:
Code
1
2
3
4
5
6
Контейнер: <ИКМС.468367.179_П>
Данные:
   БД_ИКМС.468367.179
Контейнер: <ИКМС.468367.179ВП_П>
Данные:
   БД_ИКМС.468367.179ВП
Т.е. мой класс достает все контейнеры, содержащие данные. Осталось прикрутить сохранение общего ихнего контейнера, в который они входят.

Добавлено через 6 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
Осталось прикрутить сохранение общего ихнего контейнера, в который они входят.
А он уже есть в списке List<string> containers предпоследним.

Добавлено через 1 минуту
containers[0] содержит имя Root'а документа.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 15:29
Добавить в класс:
C#
1
2
public string RootName { get => containers[0]; }
public string LastDataContainer { get => containers[^2]; }
В проге:
C#
1
2
3
4
5
foreach (XElement element in doc.Elements())
    mxmlp.DumpXml(element);
Console.WriteLine(mxmlp);
Console.WriteLine("Root: " + mxmlp.RootName);
Console.WriteLine("Data container: " + mxmlp.LastDataContainer);
Вывод в консоль:
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
05.07.2023, 15:38
Поправка:
C#
1
public string LastDataContainer { get => containers[^(--count)]; }
В условии if (element.HasElements)
C#
1
2
3
    containers.Add(element.Name.ToString());
    count++;
    //...
Вывод:
Code
1
2
3
4
5
6
7
8
9
Контейнер: <ИКМС.468367.179_П>
Данные:
   БД_ИКМС.468367.179
Контейнер: <ИКМС.468367.179ВП_П>
Данные:
   БД_ИКМС.468367.179ВП
 
Root: Export
Data container: ИКПодлинниковИИ
Code
1
2
3
4
5
6
7
8
9
10
Контейнер: <данные3>
Данные:
   данные1
   данные2
Контейнер: <данные4>
Данные:
   данные1
 
Root: Export
Data container: контейнер1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2023, 15:38

Объеденение множество xml файлов в один с одинаковой структурой
Здравствуйте, уважаемые программисты. Можно ли совместить множество xml файлов в один с помощью Python, чтобы иерархия тегов сохранилась?...

Один из xml файлов в Android Studio серого цвета
Один из xml файлов в Android Studio отображается серым цветом - почему? В режиме дизайна не открывается, хотя в проекте множество xml...

Много XML-файлов - импорт данных в один Excel
Добрый вечер! Прошу помочь в следующем вопросе. Имеется папка с несколькими тысячами xml-файлов. Пример одного прилагается. Структура...

Нужно объединить очень много файлов XML в один!
Возникла задача в реальные сроки объединить в один кучу (порядка 2000) файлов формата xml с одинаковой структурой в один файл. Может ли...

Объединение множества xml файлов в один с одинаковой структурой
Здравствуйте, уважаемые программисты. Можно ли совместить множество xml файлов в один с помощью bat файла, чтобы иерархия тегов...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru