最终版本:
对于之前一堆随机代码不清楚的问题,我很抱歉。基本上我需要做的是将大量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()
,则无关紧要。
答案 0 :(得分:0)
// 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);