2016-07-08 2 views
0

Окончательной версии:XML DataSet Объединения

Я прошу прощения за предыдущий неясный вопрос с кучей случайного кода. В основном то, что мне нужно сделать, чтобы объединить много файлов 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> 

Было бы здорово, если бы идентификаторы, где разные, но сортировка не нужна.

Я начал изучать файлы LINQ и XSLT, поэтому для меня это совершенно новая вещь, поэтому в предыдущей версии вопроса возник такой беспорядок.


Edit:

Так что с помощью Александра Петрова я получил почти то, что я хотел, но код не копирует значения 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

Показать точный образец xml и желаемый результат. –

+0

Хорошо, я добавил образцы XML, с которыми мне нужно работать –

ответ

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); 
+0

Кажется, что-то мне нужно, но var comments = source.Element ("info"). Elements(); дает мне: > Ссылка на объект не установлена ​​в экземпляр объекта. –

+0

@ MikołajKlimas - Это означает, что у вас нет узла 'info' в XML. У вас есть пространства имен в XML? –

+0

Мне удалось справиться с этой проблемой, но правильно знаю, что она копирует только узлы XML без каких-либо значений (я получаю основную структуру желаемого XML-файла на выходе), я отвечу на эту часть кода, которая копирует элементы. –