Style xsl dla xml - wyświetlanie danych.

0

Witam,

mam problem z następującym zagadnieniem:
próbuję napisać arkusz stylów xsl, w którym z xml będę wyświetlał m.in. grafiki na podstawie ścieżek podanych w tagach xml.
Nie wiem jak poprawnie to zrobić, bo zamiast grafik wyświetla mi się ścieżka w formie stringa. Ponadto dla każdego zbioru danych (załóżmy, że w xml mam rekordy na temat samochodów -> główny tag salon, podtag samochod, w nim marka, model, dataprodukcji, image) chciałem zrobić w pętli for-each (xsl) wyświetlanie takiego samochodu w divie... Ale nie wiem czemu te div'y chyba nie działają (jak wpisuję w nich jakiś komunikat, to nie widać go w przegladarce). Liczę na pomoc.

Pozdrawiam

0

Pokaż co już zrobiłeś. Wrzuć swojego xsl-a oraz chociaż kawałek tego xml-a, który przetwarzasz.

0

Ok,

więc tak:

i przy okazji tamtych zagadnień mam też kilka pytań:

  • czy lepiej robić w pliku xml tagi z atrybutami, czy atrybuty traktować jako kolejne zagnieżdżone tagi?
  • jak umieszczać dane tekstowe wewnątrz struktur xsl (np. div z komentarzem wewnątrz pętli for-each)?
0

Wygląda w miarę dobrze ;)

Jeśli coś Ci nie działa to najpewniej robisz błąd w xsl - np. chcesz iterować po nieistniejących elementach, itp. Dlatego nie pojawiają się te divy, o których piszesz.

Co do for-each, to wewnątrz wpisujesz standardowy html - tak jak w pozostałych elementach. Musisz uważać tylko na "ścieżkę" w select. Jeśli elementy w xml nie istnieją to nawet raz zawartość for-each nie trafi do wyniku.

W Twoim przypadku błąd jest w poszukiwaniu elementu druzyna w elemencie druzyna (<xsl:template match="druzyna">, a w nim dodatkowo <xsl:for-each select="druzyna">) co nie odpowiada strukturze xml. Wyrzuć to for-each po prostu (ale zostaw zawartość) i zobacz, że zadziała.

Co do obrazków. Zapis <img src="{image}"/> jest ok. Umieść go tylko w poprawnym miejscu (w tym przypadku w kontekście elementu druzyna - np. bezpośrednio w tej templatce "pasującej" do druzyna.

  • czy lepiej robić w pliku xml tagi z atrybutami, czy atrybuty traktować jako kolejne zagnieżdżone tagi?

Zależy od Ciebie. Jeśli zawartość nigdy nie będzie złożona to możesz zrobić z tego atrybut. W sumie ważne żeby być konsekwentnym - wówczas trudniej się pogubić pisząc xsl.

0
sihox napisał(a):

Wygląda w miarę dobrze ;)

Jeśli coś Ci nie działa to najpewniej robisz błąd w xsl - np. chcesz iterować po nieistniejących elementach, itp. Dlatego nie pojawiają się te divy, o których piszesz.

Co do for-each, to wewnątrz wpisujesz standardowy html - tak jak w pozostałych elementach. Musisz uważać tylko na "ścieżkę" w select. Jeśli elementy w xml nie istnieją to nawet raz zawartość for-each nie trafi do wyniku.

W Twoim przypadku błąd jest w poszukiwaniu elementu druzyna w elemencie druzyna (<xsl:template match="druzyna">, a w nim dodatkowo <xsl:for-each select="druzyna">) co nie odpowiada strukturze xml. Wyrzuć to for-each po prostu (ale zostaw zawartość) i zobacz, że zadziała.

Co do obrazków. Zapis <img src="{image}"/> jest ok. Umieść go tylko w poprawnym miejscu (w tym przypadku w kontekście elementu druzyna - np. bezpośrednio w tej templatce "pasującej" do druzyna.

  • czy lepiej robić w pliku xml tagi z atrybutami, czy atrybuty traktować jako kolejne zagnieżdżone tagi?

Zależy od Ciebie. Jeśli zawartość nigdy nie będzie złożona to możesz zrobić z tego atrybut. W sumie ważne żeby być konsekwentnym - wówczas trudniej się pogubić pisząc xsl.

Aha rozumiem - czyli jeśli daję szablon jako match = a, to pętla for-each już nie może iść po tym a tylko po jakimś elemencie wewnatrz tego węzła a ?

I jeszcze pytanie kolejne - jeśli chciałbym do jednego xml-a zrobić 2-3 szablony do alternatywnego wyświetlania różnych danych, to można to wywoływać jakoś automatem przez podlinkowanie za pomocą czy raczej tylko ręczna zmiana szablonu przypiętego w <head> wchodzi w grę?

0

Aha rozumiem - czyli jeśli daję szablon jako match = a, to pętla for-each już nie może iść po tym a tylko po jakimś elemencie wewnatrz tego węzła a ?

Dokładnie tak. Dla tego szablonu elementem głównym (/) jest właśnie owo a.

I jeszcze pytanie kolejne - jeśli chciałbym do jednego xml-a zrobić 2-3 szablony do alternatywnego wyświetlania różnych danych, to można to wywoływać jakoś automatem przez podlinkowanie za pomocą czy raczej tylko ręczna zmiana szablonu przypiętego w <head> wchodzi w grę?

Jeśli transformację robi przeglądarka to pozostaje tylko xsl. W nim możesz zareagować na szczególne dane w określony sposób. Wedle uznania. Co innego jeśli transformację, a przynajmniej generowanie xml-a, robisz gdzieś w backendzie. Możesz sobie podpiąć inny szablon na życzenie (np. reagując na kliknięcie jakiegoś linku, itp.).

0
sihox napisał(a):

Jeśli transformację robi przeglądarka to pozostaje tylko xsl. W nim możesz zareagować na szczególne dane w określony sposób. Wedle uznania. Co innego jeśli transformację, a przynajmniej generowanie xml-a, robisz gdzieś w backendzie. Możesz sobie podpiąć inny szablon na życzenie (np. reagując na kliknięcie jakiegoś linku, itp.).

Chodzi mi o to, czy robiąc bardzo prosty projekt (żeby się nauczyć xml+xslt) można przygotować sobie 2 różne szablony i przełączać je bez konieczności grzebania w kodzie xml :P

0

Stwórz sobie kilka kopii xml-a, podmień nazwę szablonu w każdym z nich, otwórz w różnych oknach przeglądarki i korzystaj ;) Chyba, że także edytujesz xml-a - wówczas to kiepski pomysł.

0

Dzięki za wyjaśnienie. Czyli to jedyne wyjście. W razie czego jeszcze będę pytał, bo chciałbym jeszcze teraz ogarnąć export danych do pdf, z xml do xml oraz xml do html ;] I jeszcze chyba muszę doczytać do czego służą pliki xsd...

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