Šta je novo?

vise tablela u jednom xml-u i jedan xslt

silverglider

Administrator
Administrator
Učlanjen(a)
30.07.2000
Poruke
5,577
Poena
770
Napominjem na pocetku da ne koristim nikakav specijalni editor za stylesheetove, vec najobicniji text editor (koji samo farba tagove) i da sam za xlst pocetnik.

Problem je u xsl:for-each elementu. Naime, sve lepo radi kada se ima u xml-u jedna lista koja bi trebala da formira tabelu. Medjutim, interesanto je kako reaguje kada postoji vise lista, tj. treba da se prikazu tabela za tabelom (razlicite kolone, naravno). Nikakav problem nije napraviti ukoliko su te liste podeljene u vise xml fajlova, pa obradjene od strane jednog xslt-a. Medjutim, vrlo je vazno da se svi podaci stave u jedan xml fajl i da postoji jedan stylesheet.
Radi ilustracije dacu "skolski" primer xml fajla (bez opisnih i uobicajenih tagova, bez atributa, samo 'cisti' data) :

[code:1]
<inventory>

<books>
<book>
<title>Na peronu zaborava</title>
<author>Barbara Sidni</author>
<price>100</price>
<book>
<book>
<title>Sense And Sensibilities</title>
<author>Jane Austin</author>
<price>200</price>
<book>
</books>

<movies>
<movie>
<title>Zuto napred, braon pozadi</title>
<lang>srpski</lang>
<length>120</length>
<price>150</price>
</movie>
<movie>
<title>Snezana i 7 crnaca</title>
<lang>nemacki</lang>
<length>100</length>
<price>170</price>
</movie>
<movies>

</inventory>
[/code:1]

Problem je u tome sto na celom skoupu izgleda moze da ima samo jedna xsl:for-each petlja. To jest, ne moze da dodje samo do movies i tu stane, pa da odatle krene druga. Ukoliko se procesira samo lista "books", ispadne sve super:

[code:1]
<xsl:template match="/">
<html>
<head>
<title>naslov</title>
</head>
<body>

<xsl:apply-templates select="inventory/books" />
</body>
</html>
</xsl:template>

<xsl:template match="books">
<table>
<xsl:for-each select="book">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="author"/></td>
<td><xsl:value-of select="price"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>

[/code:1]

Medjutim, ako napravim slican template za 'movies', pa pozovem:

<xsl:apply-templates select="inventory/books" />
<xsl:apply-templates select="inventory/movies" />

xslt prikazuje tabele, ali _jednu_preko_druge_, formirao je "cesalj".
xsl:for-each je isao bukvalno logikom "prikazi prvi iz prve liste, prikazi prvi iz druge liste, prikazi drugi iz prve liste", itd. Znaci:

[code:1]
Na peronu zaborava | Barbara Sidni | 100 <- book
Zuto napred, braon pozadi | srpski | 120 | 150 <- movie
Sense And Sensibilities | Jane Austin | 200 <- book
Snezana i 7 crnaca | nemacki | 100 | 170 <- movie
[/code:1]

Kako "zaredjati" jednu tabelu iza druge?
Probao sam i sa testiranjem position() vrednosti ili po imenu elementa, pa da pozovem template po imenu, ali uvek ispada isto.
Ima li neka xlst funkcija ili element koji bi mi ovo omogucavao ili da batalim i probam da zavrsim stvar koristeci data binding sa html-om direktno?
(<XML ID="inventory" SRC="inventoryfile.xml"></XML>)
 
Ja sam *****; nasao sam problem - <table> tag je imao atribut align="right", koji je pravio problem ovde.
 
ma to sam odmah i ja hteo da ti kazem, ali sam hteo da te pustim da sam nadjes gresku :)
 
Nazad
Vrh Dno