DataSet a struktura xml'a

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...

0

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

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.

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.

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.

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.

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