XML 数据集合并
XML DataSet Merging
最终版本:
对于之前用一堆随机代码提出的不清楚的问题,我深表歉意。基本上我需要做的是将一个文件夹中的很多 XML 个文件(一次大约 100 - 200 个)合并到一个文件中,这里是文件输入和输出的示例:
文件 1
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text1</komentarz>
<wersja>Text1</wersja>
<copyright>Text1</copyright>
<data-utworzenia>Text1</data-utworzenia>
<system>
<producent>Text1</producent>
<symbol>Text1</symbol>
<email>Text1</email>
<wersja>Text1</wersja>
<nazwa>Text1</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text1</id-knt-ks>
<nazwa>Text1</nazwa>
<id-knt>Text1</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text3</id-knt-ks>
<nazwa>Text3</nazwa>
<id-knt>Text3</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text1</id-towaru>
<nazwa>Text1</nazwa>
<id-towaru-ks>Text1</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text1</id-zamowienia>
<tylko-komplet>Text1</tylko-komplet>
<id-knt-dostawcy>Text1</id-knt-dostawcy>
<data-wystawienia>Text1</data-wystawienia>
<nr-zamowienia>Text1</nr-zamowienia>
<id-knt-odbiorcy>Text1</id-knt-odbiorcy>
<potwierdzanie>Text1</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text1</id-towaru>
<id-poz-zamowienia>Text1</id-poz-zamowienia>
<nr-poz-zamowienia>Text1</nr-poz-zamowienia>
<ilosc>Text1</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
文件 2
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text2</komentarz>
<wersja>Text2</wersja>
<copyright>Text2</copyright>
<data-utworzenia>Text2</data-utworzenia>
<system>
<producent>Text2</producent>
<symbol>Text2</symbol>
<email>Text2</email>
<wersja>Text2</wersja>
<nazwa>Text2</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text2</id-knt-ks>
<nazwa>Text2</nazwa>
<id-knt>Text2</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text2</id-towaru>
<nazwa>Text2</nazwa>
<id-towaru-ks>Text2</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text2</id-zamowienia>
<tylko-komplet>Text2</tylko-komplet>
<id-knt-dostawcy>Text2</id-knt-dostawcy>
<data-wystawienia>Text2</data-wystawienia>
<nr-zamowienia>Text2</nr-zamowienia>
<id-knt-odbiorcy>Text2</id-knt-odbiorcy>
<potwierdzanie>Text2</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text2</id-towaru>
<id-poz-zamowienia>Text2</id-poz-zamowienia>
<nr-poz-zamowienia>Text2</nr-poz-zamowienia>
<ilosc>Text2</ilosc>
</pozycja>
<pozycja>
<id-towaru>Text3</id-towaru>
<id-poz-zamowienia>Text3</id-poz-zamowienia>
<nr-poz-zamowienia>Text3</nr-poz-zamowienia>
<ilosc>Text3</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
并像这样获取新的 XML 文件:
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text1</komentarz>
<wersja>Text1</wersja>
<copyright>Text1</copyright>
<data-utworzenia>Text1</data-utworzenia>
<system>
<producent>Text1</producent>
<symbol>Text1</symbol>
<email>Text1</email>
<wersja>Text1</wersja>
<nazwa>Text1</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text1</id-knt-ks>
<nazwa>Text1</nazwa>
<id-knt>Text1</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text3</id-knt-ks>
<nazwa>Text3</nazwa>
<id-knt>Text3</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text2</id-knt-ks>
<nazwa>Text2</nazwa>
<id-knt>Text2</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text1</id-towaru>
<nazwa>Text1</nazwa>
<id-towaru-ks>Text1</id-towaru-ks>
</towar>
<towar>
<id-towaru>Text2</id-towaru>
<nazwa>Text2</nazwa>
<id-towaru-ks>Text2</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text1</id-zamowienia>
<tylko-komplet>Text1</tylko-komplet>
<id-knt-dostawcy>Text1</id-knt-dostawcy>
<data-wystawienia>Text1</data-wystawienia>
<nr-zamowienia>Text1</nr-zamowienia>
<id-knt-odbiorcy>Text1</id-knt-odbiorcy>
<potwierdzanie>Text1</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text1</id-towaru>
<id-poz-zamowienia>Text1</id-poz-zamowienia>
<nr-poz-zamowienia>Text1</nr-poz-zamowienia>
<ilosc>Text1</ilosc>
</pozycja>
</pozycje>
</zamowienie>
<zamowienie>
<naglowek>
<id-zamowienia>Text2</id-zamowienia>
<tylko-komplet>Text2</tylko-komplet>
<id-knt-dostawcy>Text2</id-knt-dostawcy>
<data-wystawienia>Text2</data-wystawienia>
<nr-zamowienia>Text2</nr-zamowienia>
<id-knt-odbiorcy>Text2</id-knt-odbiorcy>
<potwierdzanie>Text2</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text2</id-towaru>
<id-poz-zamowienia>Text2</id-poz-zamowienia>
<nr-poz-zamowienia>Text2</nr-poz-zamowienia>
<ilosc>Text2</ilosc>
</pozycja>
<pozycja>
<id-towaru>Text3</id-towaru>
<id-poz-zamowienia>Text3</id-poz-zamowienia>
<nr-poz-zamowienia>Text3</nr-poz-zamowienia>
<ilosc>Text3</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
如果 ID 不同但不需要排序,那就太好了。
我开始学习 LINQ 和 XSLT 文件,所以这对我来说是全新的东西,这就是为什么以前版本的问题如此混乱的原因。
编辑:
因此,在 Alexander Petrov 的帮助下,我几乎得到了我想要的东西,但代码不会复制 XML 值,只会复制节点。这是执行此操作的部分:
var kontrahent = source.Elements("kontrahenci").Nodes();
kontrahenci.Add(kontrahent);
var towar = source.Elements("towary").Elements("towar").Nodes();
towary.Add(towar);
var zamowienie = source.Elements("zamowienia").Elements("zamowienie").Nodes();
zamowienia.Add(zamowienie);
而且最后是Nodes()
还是Elements()
都没有关系
// Specify your real namespace.
XNamespace ns = "http://www.somelink.pl/otherlink";
var info = new XElement(ns + "info");
var kontrahenci = new XElement(ns + "kontrahenci");
var towary = new XElement(ns + "towary");
var zamowienia = new XElement(ns + "zamowienia");
foreach (var file in Directory.EnumerateFiles(path, "*.xml"))
{
var source = XElement.Load(file);
var infoElements = source.Element(ns + "info")?.Elements();
info.Add(infoElements);
var kontrahenciElements = source.Element(ns + "kontrahenci")?.Elements();
kontrahenci.Add(kontrahenciElements);
var towaryElements = source.Element(ns + "towary")?.Elements();
towary.Add(towaryElements);
var zamowieniaElements = source.Element(ns + "zamowienia")?.Elements();
zamowienia.Add(zamowieniaElements);
}
var result = new XElement(ns + "dokumenty", info, kontrahenci, towary, zamowienia);
result.Save(filename);
最终版本:
对于之前用一堆随机代码提出的不清楚的问题,我深表歉意。基本上我需要做的是将一个文件夹中的很多 XML 个文件(一次大约 100 - 200 个)合并到一个文件中,这里是文件输入和输出的示例:
文件 1
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text1</komentarz>
<wersja>Text1</wersja>
<copyright>Text1</copyright>
<data-utworzenia>Text1</data-utworzenia>
<system>
<producent>Text1</producent>
<symbol>Text1</symbol>
<email>Text1</email>
<wersja>Text1</wersja>
<nazwa>Text1</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text1</id-knt-ks>
<nazwa>Text1</nazwa>
<id-knt>Text1</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text3</id-knt-ks>
<nazwa>Text3</nazwa>
<id-knt>Text3</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text1</id-towaru>
<nazwa>Text1</nazwa>
<id-towaru-ks>Text1</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text1</id-zamowienia>
<tylko-komplet>Text1</tylko-komplet>
<id-knt-dostawcy>Text1</id-knt-dostawcy>
<data-wystawienia>Text1</data-wystawienia>
<nr-zamowienia>Text1</nr-zamowienia>
<id-knt-odbiorcy>Text1</id-knt-odbiorcy>
<potwierdzanie>Text1</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text1</id-towaru>
<id-poz-zamowienia>Text1</id-poz-zamowienia>
<nr-poz-zamowienia>Text1</nr-poz-zamowienia>
<ilosc>Text1</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
文件 2
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text2</komentarz>
<wersja>Text2</wersja>
<copyright>Text2</copyright>
<data-utworzenia>Text2</data-utworzenia>
<system>
<producent>Text2</producent>
<symbol>Text2</symbol>
<email>Text2</email>
<wersja>Text2</wersja>
<nazwa>Text2</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text2</id-knt-ks>
<nazwa>Text2</nazwa>
<id-knt>Text2</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text2</id-towaru>
<nazwa>Text2</nazwa>
<id-towaru-ks>Text2</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text2</id-zamowienia>
<tylko-komplet>Text2</tylko-komplet>
<id-knt-dostawcy>Text2</id-knt-dostawcy>
<data-wystawienia>Text2</data-wystawienia>
<nr-zamowienia>Text2</nr-zamowienia>
<id-knt-odbiorcy>Text2</id-knt-odbiorcy>
<potwierdzanie>Text2</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text2</id-towaru>
<id-poz-zamowienia>Text2</id-poz-zamowienia>
<nr-poz-zamowienia>Text2</nr-poz-zamowienia>
<ilosc>Text2</ilosc>
</pozycja>
<pozycja>
<id-towaru>Text3</id-towaru>
<id-poz-zamowienia>Text3</id-poz-zamowienia>
<nr-poz-zamowienia>Text3</nr-poz-zamowienia>
<ilosc>Text3</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
并像这样获取新的 XML 文件:
<dokumenty xmlns="http://www.somelink.pl/otherlink">
<info>
<komentarz>Text1</komentarz>
<wersja>Text1</wersja>
<copyright>Text1</copyright>
<data-utworzenia>Text1</data-utworzenia>
<system>
<producent>Text1</producent>
<symbol>Text1</symbol>
<email>Text1</email>
<wersja>Text1</wersja>
<nazwa>Text1</nazwa>
</system>
</info>
<kontrahenci>
<kontrahent>
<id-knt-ks>Text1</id-knt-ks>
<nazwa>Text1</nazwa>
<id-knt>Text1</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text3</id-knt-ks>
<nazwa>Text3</nazwa>
<id-knt>Text3</id-knt>
</kontrahent>
<kontrahent>
<id-knt-ks>Text2</id-knt-ks>
<nazwa>Text2</nazwa>
<id-knt>Text2</id-knt>
</kontrahent>
</kontrahenci>
<towary>
<towar>
<id-towaru>Text1</id-towaru>
<nazwa>Text1</nazwa>
<id-towaru-ks>Text1</id-towaru-ks>
</towar>
<towar>
<id-towaru>Text2</id-towaru>
<nazwa>Text2</nazwa>
<id-towaru-ks>Text2</id-towaru-ks>
</towar>
</towary>
<zamowienia>
<zamowienie>
<naglowek>
<id-zamowienia>Text1</id-zamowienia>
<tylko-komplet>Text1</tylko-komplet>
<id-knt-dostawcy>Text1</id-knt-dostawcy>
<data-wystawienia>Text1</data-wystawienia>
<nr-zamowienia>Text1</nr-zamowienia>
<id-knt-odbiorcy>Text1</id-knt-odbiorcy>
<potwierdzanie>Text1</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text1</id-towaru>
<id-poz-zamowienia>Text1</id-poz-zamowienia>
<nr-poz-zamowienia>Text1</nr-poz-zamowienia>
<ilosc>Text1</ilosc>
</pozycja>
</pozycje>
</zamowienie>
<zamowienie>
<naglowek>
<id-zamowienia>Text2</id-zamowienia>
<tylko-komplet>Text2</tylko-komplet>
<id-knt-dostawcy>Text2</id-knt-dostawcy>
<data-wystawienia>Text2</data-wystawienia>
<nr-zamowienia>Text2</nr-zamowienia>
<id-knt-odbiorcy>Text2</id-knt-odbiorcy>
<potwierdzanie>Text2</potwierdzanie>
</naglowek>
<pozycje>
<pozycja>
<id-towaru>Text2</id-towaru>
<id-poz-zamowienia>Text2</id-poz-zamowienia>
<nr-poz-zamowienia>Text2</nr-poz-zamowienia>
<ilosc>Text2</ilosc>
</pozycja>
<pozycja>
<id-towaru>Text3</id-towaru>
<id-poz-zamowienia>Text3</id-poz-zamowienia>
<nr-poz-zamowienia>Text3</nr-poz-zamowienia>
<ilosc>Text3</ilosc>
</pozycja>
</pozycje>
</zamowienie>
</zamowienia>
</dokumenty>
如果 ID 不同但不需要排序,那就太好了。
我开始学习 LINQ 和 XSLT 文件,所以这对我来说是全新的东西,这就是为什么以前版本的问题如此混乱的原因。
编辑:
因此,在 Alexander Petrov 的帮助下,我几乎得到了我想要的东西,但代码不会复制 XML 值,只会复制节点。这是执行此操作的部分:
var kontrahent = source.Elements("kontrahenci").Nodes();
kontrahenci.Add(kontrahent);
var towar = source.Elements("towary").Elements("towar").Nodes();
towary.Add(towar);
var zamowienie = source.Elements("zamowienia").Elements("zamowienie").Nodes();
zamowienia.Add(zamowienie);
而且最后是Nodes()
还是Elements()
都没有关系
// Specify your real namespace.
XNamespace ns = "http://www.somelink.pl/otherlink";
var info = new XElement(ns + "info");
var kontrahenci = new XElement(ns + "kontrahenci");
var towary = new XElement(ns + "towary");
var zamowienia = new XElement(ns + "zamowienia");
foreach (var file in Directory.EnumerateFiles(path, "*.xml"))
{
var source = XElement.Load(file);
var infoElements = source.Element(ns + "info")?.Elements();
info.Add(infoElements);
var kontrahenciElements = source.Element(ns + "kontrahenci")?.Elements();
kontrahenci.Add(kontrahenciElements);
var towaryElements = source.Element(ns + "towary")?.Elements();
towary.Add(towaryElements);
var zamowieniaElements = source.Element(ns + "zamowienia")?.Elements();
zamowienia.Add(zamowieniaElements);
}
var result = new XElement(ns + "dokumenty", info, kontrahenci, towary, zamowienia);
result.Save(filename);