Łączenie danych z XML

0

Jestem zielony z XML i nie mam potrzeby zgłębiać tematu od A do Z ale, natrafiam na problem gdzie mam dane zapisane w pliku XML wraz z opisem XSD. Wygląda to jak opis bazy danych i na końcu są jakieś dane. struktura tabeli mniej więcej wygląda tak: PROJEKT<KALOGI<OBIEKTY<PODOBIEKTY. Mam mnóstwo plików w których jest po jednym elemencie "OBIEKTY" i pare pod elementów przypisanych do niego. Ja potrzebuje stworzyć jeden plik XML w którym zbiorę z pozostałych OBIEKTY wraz z pod elementami. Plik ten później będzie wykorzystywany przez inny program. Mógłbym zrobić to wszytko tekstowo wyszukując odpowiednie tagi i kopiując do danego pliku, ale za każdym razem musiałbym zmieniać ID OBIEKTU i przypisywać POD OBIEKTOM odpowiednie ID. Pewnie jest na to prostszy sposób. W Visual studio z wiersza poleceń wygenerowałem DataSet za pomocą XML.EXE. Jak by mnie ktoś ukierunkował do odpowiedniego artykułu z podobnym przykładem był bym super wdzięczny. Zaznaczę że nie potrzebuje tworzyć bazy danych. Ponieważ dane mają być zassane z wielu plików i na końcu ma być wygenerowany jeden plik ze wszystkimi danymi.

0

Widzę że nikt się nie zainteresował. Pewnie za długi opis i zacząłem od: "Jestem zielony". Więc spróbuje jeszcze raz.

 KukaLoadProjectDataSet ds = new KukaLoadProjectDataSet();
 KukaLoadProjectDataSet copyds = new KukaLoadProjectDataSet();

  ds.ReadXml(myXMLfile);
  copyds.ReadXml(myXMLfile2);
  ds.Robot.AddRobotRow(copyds.Robot[0]);
  ds.WriteXml("D:\\MyFile.XML");
          

Wczytuje dwa pliki XML o takiej samej strukturze z innymi danymi. Ale w obydwu plikach występuje po jednym rekordzie w tabeli "Robot" Każdy z ID 1.
Powyższy przykład wyrzuca błąd bo twierdzi że taki element już istnieje w tabeli. domyślam się że chodzi o takie samo ID.
.merge(dataset) nadpisuje dane z pierwszego pliku drugim plikiem i tyle. A ja potrzebuje żeby rekord z tabeli Robot został dodany z kolejnym ID i wszystkie elementy określone jako ChildRelation również zostały dodane oraz ich klucze RobotID zaktualizowane odpowiednio.

0

Co to jest AddRobotRow?
Z jakiego serializera korzystasz?
Pokaż przykładową strukturę XML'a.

Używaj enterów do wydzielenia "zbiorów" myśli/problemów.

Gdzie wyrzuca Ci błąd? Jaka jest jego oryginalna treść?

Co to jest KukaLoadDataSet, pokaż strukturę.

Ciężko pomóc jak wrzucasz jakiś chaotyczny opis bez składu i ładu :)

0

Przeczytaj dane, ustaw co jak chcesz a potem to zapisz (chcesz kolejne Id? to sobie je ustaw). Nie licz i nie czekaja na jakas magie - zrob to sam :).

0

Utwórz sobie typ odpowiadający temu co przychodzi w xmlach, sparsuj 2 pliki, zmerge'uj 2 obiekty i na końcu zrób serializację do docelowego xml

0

Taki pro tip:
W visual studio da się stworzyć schemat obiektów na podstawie wklejonego XML'a (i JSON'a też). Super opcja ;D
https://stackoverflow.com/questions/4203540/generate-c-sharp-class-from-xml

0
var napisał(a):

Utwórz sobie typ odpowiadający temu co przychodzi w xmlach, sparsuj 2 pliki, zmerge'uj 2 obiekty i na końcu zrób serializację do docelowego xml

Utworzyłem klasę która dziedziczy po DataSet (KukaLoadProjectDataSet) na postawie XML'a używając XML.EXE.
Klasa zawiera wszelkie potrzebne relacje. Wczytuje dane z dwóch różnych XML'ów. Nie mogę zastosować Merge, ze względu na to że rekordy mają to samo ID i jeden plik zostaje nadpisany drugim.

Zostaje mi chyba rozwiązanie które zresztą zastosowałem i działa :

tamtamtu napisał(a):

Przeczytaj dane, ustaw co jak chcesz a potem to zapisz (chcesz kolejne Id? to sobie je ustaw). Nie licz i nie czekaja na jakas magie - zrob to sam :).

Z ciekawości załączam przykładowy XML.
Może ktoś zna prostszy sposób na kopiowanie rekordów razem z zależnościami.
W konkretnym przypadku chodzi o skopiowanie elementu <Robot> z wszystkimi <LoadingCase> zawierającymi <RobotID> takie samo jak dany <Robot>.

1 użytkowników online, w tym zalogowanych: 0, gości: 1