DataSet a struktura xml'a

Odpowiedz Nowy wątek
2011-07-25 13:28
0

Chciałabym uzyskać xml, który ma narzuconą hierarchiczną strukturę. Wyglądałoby to mniej więcej tak:

<autor imie="Jan" nazwisko="Kowalski">
    <ksiazka tytul="Idzie niebo ciemną nocą..." />
    <ksiazka tytul="...ma w fartuszku pełno gwiazd" />
    <ksiazka tytul="Gwiazdy błyszczą i migoczą" />
    <ksiazka tytul="aż wyjrzały ptaszki z gniazd" />
</autor>

Na chwilę obecną mam przygotowane dwa oddzielne selecty, z czego jeden pobiera autorów, a drugi pobiera książki danego autora. Można je skompilować w jeden, ale wtedy będą 4 rekordu o danym autorze, co w xmlu na podstawie DataSeta wygląda tak, że mam zamiast powyższego:

<rekord imie="Jan" nazwisko="Kowalski" tytul="Idzie niebo ciemną nocą..." />
<rekord imie="Jan" nazwisko="Kowalski" tytul="...ma w fartuszku pełno gwiazd" />
<rekord imie="Jan" nazwisko="Kowalski" tytul="Gwiazdy błyszczą i migoczą" />
<rekord imie="Jan" nazwisko="Kowalski" tytul="aż wyjrzały ptaszki z gniazd" />

Jaki będzie najlepszy sposób na przejście od tego co mam do tego co chcę uzyskać...? Zależy mi na tym, żeby móc podać DataSetowi po prostu sql'a (co oznacza, że jednak muszę skompilować te dwa w jeden). Nie wiem tylko, jakiego mechanizmu użyć do narzucenia xmlowi odpowiedniego kształtu...

edytowany 1x, ostatnio: aurel, 2011-07-25 13:29

Pozostało 580 znaków

2011-07-25 13:53
0

A to da się w ogóle sterować wyglądem XMLa w DataSecie?
Ja to bym zrobił serializacją na normalnych klasach.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-07-25 14:23
0

No, jakoś się sterować da. Na przykład możesz node'y ustawiać jako kolejne elementy, albo jako atrybuty. Możesz zmienić nazwę tabeli czy rekordu. To takie ułomne, podstawowe ;)
Serializacja na klasach raczej nie jest optymalnym rozwiązaniem - muszę założyć, że format danych może się zmienić. To co ja podaję teraz do WebService'u - to tylko sql poprzez plik konfiguracyjny. Super i mega uniwersalne i każdy może to zrobić. Klasy serializowane byłyby już w źródłach, więc nie tak fajnie...

Generalnie jaka by to modyfikacja nie miałaby być, powinno być możliwe zrobienie jej jak najbardziej uniwersalnie. Np. jeśli chcę decydować, czy dane mają być w atrybutach czy elementach - powinnam to podać przez plik konfiguracyjny.

Myślałam o wykorzystaniu plików xslt, ale najpierw chciałam dopytać, czy są jeszcze jakieś inne sposoby. Poza tym, tak dawno nie robiłam nic z xslt, że nawet nie pamiętam, czy da radę przerobić xmla w nich tak jak to podałam.

Pozostało 580 znaków

2011-07-25 15:42
0

Musisz mieć jedną tabele z autorami z PK, drugą z książkami i FK do autorów i w ds stworzyć relację. Tylko nie jestem pewien jak dokładnie zostanie to zserializowane przez ds, sprawdź. Ale jeśli to nie rozwiąże problemu, to jak pisze Somekind jest najlepszym pomysłem.

Pozostało 580 znaków

2011-07-25 16:06
0

Nie mam uprawnień do robienia zmian w bazie danych :D
A dane, które tu sobie niefrasobliwie nazwałam autor i książka w rzeczywistości są zbierane po kilku różnych tabelkach...
Spróbuję zwrócić się do ludzi "od bazy danych" z prośbą o odpowiednie widoki... Dzięki za hint, może tym sposobem za kilka dni coś z tego będzie :P

To co pisze Somekind totalnie nie przejdzie. Nie wkomponowuje się w projekt i tyle... Prędzej zostanie zaakceptowana zmiana struktury xmla niż zmiana struktury projektu.

ale ja ci bazy nie kazałem zmieniać, chodzi o to jak wpakujesz dane do ds, w ds można tworzyć relacje między tabelami - massther 2011-07-25 16:19
Tak, ale nie ma w chwili obecnej w bazie danych tabel, które umownie nazwałam "autor" i "książka". Dla mnie docelowo mają być tak zgrupowane, ale sql zbiera te dane z 4 różnych tabel. Z tego już za pewne widzisz, że nie mam swobody nadawania PK i FK... a te które są, niekoniecznie muszą już pasować... Chyba że mówisz mi, że można w ds również takie rzeczy definiować....? Wtedy zdecydowanie muszę się temu przyjrzeć. - aurel 2011-07-25 16:25

Pozostało 580 znaków

2011-07-25 16:32
0

Lo matko! Ale wyróżniasz dane nadrzędne i podrzędne z tego co zbierasz z tych 4 tabel. Dane nadrzędne mają unikalny identyfikator, a podrzędne po tym identyfikatorze pasują do nadrzędnych (klucz nie musi być jedną kolumną). Jeśli możesz wybrać te dane jako dwa zbiory, czyli result set 1 = dane nadrzędne z unikalnym identyfikatorem oraz result set 2 = dane podrzędne z identyfikatorem danych nadrzędnych do których pasują, to wstawiasz to do ds jako dwie tabele, tworzysz relacje, serializujesz (czy tam WriteXml(...)).
DS ma taką właściwość jak Relations.

Ok, wielkie dzięki, za szczegółowe nakierowanie... - aurel 2011-07-25 16:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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