Datuve :: Web risinājumi ar XSLT (Extensible Stylesheet Language Transformation)

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 46

Reģistrētie lietotāji online: 0

Viesi online: 46

Datuve.lv video
Top.LV

Web risinājumi ar XSLT (Extensible Stylesheet Language Transformation)

Ievietoja: sn1per @ 2007.08.03 15:19  

Vispirms atvainošos par to, ka neesmu no tiem labākajiem cilvēkiem, kas kaut ko varētu rakstiski paskaidrot, jo parasti kodu rakstu on-the-fly un paralēli mutiski stāstu, ko es daru.
Bet kam vajadzēs – tas sapratīs par ko iet runa.

Šonedēļ mēs ar kolēģi pārveidojām vienu sadaļu mūsu uzņēmuma lapu no parasta HTML failiņa ar statiskām vērtībām uz normāli administrējamu risinājumu, jo bija diezgan neparocīgi rakties HTML failā, lai veiktu izmaiņas, pievienotu vai dzēstu informāciju HTML tabulā. Vēl protams ir jāatceras, ka vajadzēja pareizi jaunās rindas likt <tr></tr> tagos, kolonnas <td></td> un tā tālāk.
Mēs varējām brīvi izvēlēties kā taisīt administrējamu sadaļu, viens variants, protams, bija izmantot SQL datubāzi un glabāt visu tur, bet izvēlējāmies ērto un viegli veidojamo XSLT variantu. Es bieži izmantoju XSLT, man tas liekas vieglāks kā citi risinājumi (pat informācija no DB nāk XML formātā un atliek tikai attiecīgo stylesheet uztaisīt), bet pastāstīšu arī citiem, kā to darīt.

Pirmkārt, pastāstīšu nedaudz par XSL. XSL (Extensible Stylesheet Language) failos var nodefinēt, kā tiks attēloti konkrēti XML tagi. Ja CSS nodrošina (X)HTML attēlošanas stilus, tad XSL ir attiecīgi XML stilu nodrošinātājs. No CSS tas atšķiras ar to, ka HTML tags <table></table> jau parāda to, ka šī ir tabula un CSS stilos mēs mainam tabulas izskatu, bet iekš XML tagu nosaukumi nespēlē nekādu lomu. Piemēram <table></table> varētu nozīmēt to, ka šajā tagā glabājas informācija par galdu. XSLT (Extensible Stylesheet Language Transformation) nodrošina XML dokumentu transformēšanu XHTML dokumentā. Lai kaut nedaudz izprastu kā tas notiek, jums vajadzētu zināt, kas ir XML un kas ir XHTML.
XML failos mēs datus glabājam tagos, kuriem vienmēr ir atverošais un aizverošais tags. Par piemēru ņemsim šodien nopublicēto sarakstu ar izmaksām, no kurām būtu jāšķiras luksus klases automašīnu vadītājiem (vai apdrošināšanai) pēc ietriekšanās citā automašīnā ar ātrumiem 6 vai 3 jūdzēm stundā (attiecīgi 9.6 un 4.8 km/h). Vairāk info par testu un pašus datus var apskatīt CNNmoney rakstā. Vispirms ņemsim šos datus un saglabāsim tos XML failā. Izveidojam failu dati.xml un iekopējam tur iekšā

source ir šeit


Tālāk uztaisam failu dati.xsl, kurā glabāsies stylesheet

source ir šeit


Beidzot uztaisam failu dati.php, kurā mēs transformēsim XML ar attiecīgo XSL stylesheetu

source ir šeit


Rezultātā mums ir izveidojusies tabula ar datiem.


Nedaudz pastāstīšu par XSL tagiem.
<xsl:for-each select="cars/car"></xsl:for-each> nozīmē to, ka ciklā tiek lasīti dati no katra <car></car> taga, kas protams atrodas iekš <cars></cars> taga. <xsl:value-of select="title"/> norāda to, ka konkrētajā vietā tiek ievietota vērtība no taga <title></title>.
Nākamais solis būtu ielikt kopējo summu par remontu un katru otro rindiņu iekrāsot citā krāsā, lai tabula būtu pārskatāmāka. Failā dati.xsl veicam modifikācijas

source ir šeit


Rezultātā mums ir izveidojusies tabula ar datiem.



<xsl:if test="position() mod 2 = 1"></xsl:if> nozīmē „ja ieraksta numuru dalot ar divi mums atlikumā ir 1”. Ja if atgriež pozitīvu rezultātu, tad tiek nomainīta rindiņas krāsa ar <xsl:attribute name="style"></xsl:attribute>.
Ierakstot <xsl:value-of select="front_full + front_corner + rear_full + rear_corner"/> mēs katram ierakstam saskaitam kopējo bojājumu izmaksas, bet aiz cikla izveidojot pēdējo tabulas rindiņu mēs ieliekot <xsl:value-of select="sum(cars/car/front_full)"/> varam dabūt kolonnu kopsummas.
Ja vēl ar to nepietiek, tad varam izcelt minimālās un maksimālās summas katram bobjājuma veidam.

source ir šeit


Rezultātā mums ir izveidojusies tabula ar datiem.


Sākumā tiek sadefinētas maksimālās un minimālās vērtības (paņemot 1 ierakstu kārtojot pēc cipara augošā vai dilstošā secībā) un tālāk ar <xsl:choose><xsl:when></xsl:when><xsl:when></xsl:when><xsl:otherwise></xsl:otherwise></xsl:choose> mēs varam veikt to pašu, ko iekš php ar if .. elseif .. else

Pirms XSLT lietošanas iesaku palasīt w3schools tutoriāļus par šo tēmu. Datu ievadīšanai un labošanai var izmantot XSLT transformētu formu ar datiem un pie submit $_POST array apstrādāt ar array2xml klasi (piemērs), var protams apstrādāt arī savādāk.

Veiksmi darbā ar XSLT!

Saistītie raksti

Komentāri

#1 tamster @ 2007.08.03 16:25

Domāju ka tiem, kas interesējas, noderētu arī pāris teikumi par tehnisko realizāciju, konkrētāk, XSLT procesoriem (browseri, server-side) :)

#2 emsi @ 2007.08.03 16:27

va vellos, es te maajaas meeginaaju kko liidziigu izveidot, bet nekadi nesanaaca, patieshaam noderiiga informaacija, paldies, tagad vaig izmeginat, tnx

#3 /dev/info @ 2007.08.03 17:09

jā gan , būtu interesanti uzzināt par XSTL processoru brovserī, kā tur kas notiek (JScript, XML objekti ), likt transformēt clientam tas pamatīgi atbrīvotu  serveri kurš jau tā cieš no PHP

#4 gusc @ 2007.08.03 19:01

es ieteiktu vel paris lietas:
1. lietota <tbody> - tiri lai kad tiesham vajag, nepiemirstos
2. nerakstit CSS stilus HTML kodaa, bet pieshkjirt <tr> class="odd" (vai kautkaa savaadaak, lai izceltu katru otro rindu)

#5 player @ 2007.08.04 05:56

vairaak shitaadu rakstu vajag nevis kaut kaadus faking rakstu paarpublikaacijas

#6 andz @ 2007.08.05 23:41

jauki, bet reaali dziivee nekad nav bijusi vajsdziiba to pielietot

#7 Gacha2 @ 2007.08.06 22:33

Ātrumā grūti iedomāties šim reālu pielietojumu :/ varbūt kāds var pateikt man priekšā?

#8 LMN @ 2007.08.06 22:44

Viens reāls piemērs jau ir dots rakstā. Vēl - automatizēta datu izvilkšana no XHTML un HTML (valīdām vai nedaudz modificējot) lapām. Dinamisku mājaslapu veidošana. Datu noformēšana.
Ja nevari iedomāties pielietojumu - Tev tas nav vajadzīgs.

#9 Gacha2 @ 2007.08.06 23:05

Biju domājis mazliet savādāk. Datu izvilkšanai no XHTML un HTML lielākā daļa cilvēku lietotu kādu no ērtajiem XML parseriem. Intereses pēc gribētu dzirdēt kādu tādu pielietojumu, kur izdevīgāk būtu izmantot konkrēti šo tehnoloģiju nevis kādu alternatīvu.

#10 ebisons @ 2007.08.08 11:50

Tās taču ir bērnu spēlītes!

#11 LMN @ 2007.08.08 11:52

#12: Ko dara XML parseris? Parsē datus. Kā? Ar XSLT palīdzību. Kam jāraksta XSL? Cilvēkam.
Kādi vēl jautājumi?

#12 richmonds @ 2007.08.09 09:42

visa šī padarīšana noteikti veicama klienta pusē - lai serveris atpūšas. te gan diemžēl nāksies pacīnīties, lai no pārlūkā realizētā js sadabūtu attiecīgos objektus un pielabotu (ja vajag) pāris metodes šo objektu klasēs...