Patterns
Nedan kommer en liten exempelfil för att demonstrera patterns:
xml19_1.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- ingen DTD - slarvigt -->
<racers>
<driver type="F1">
<name>Mika Häkkinen</name>
<nationality>Finn</nationality>
</driver>
<driver type="rally">
<name>Marcus Grönholm</name>
<nationality>Finn</nationality>
</driver>
<driver type="rally">
<name>Colin McRae</name>
</driver>
<driver type="F1">
<name>David Couthard</name>
<nationality>Scottish</nationality>
</driver>
</racers>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken
För att komma åt delar av datat kan man använda sig av patterns.
Patterns utgår oftast från nuvarande kontext. Med det medan att
om man har en template som matchar roten (match="/") så utgår
vi från roten. Om vi har en template eller en for-each som befinner sig
djupare in i datat är detta då den kontext vi kan utgå från.
Jämför men nuvarande katalog begreppet i filhantering.
Exempel
| racers/driver/name |
Kommer att matcha alla noder som heter name och är undernod till
driver som i sin tur är undernod till racers (roten i vårt fall)
|
| racers/*/name |
kommer att matcha alla name noder som finns någonstans under racers
noden. * fungerar således som en vanlig wildcard
|
| racers/driver/* |
kommer att matcha alla noder som finns under driver. Således både
name och nationality noderna
|
| racers/driver[nationality]/name |
kommer att matcha name noden, men endast för de som har en nationality
nod.
|
| racers/driver[nationality='Finn']/name |
kommer att matcha namnen på de som har en finsk nationalitet
Här kan ni gärna jämföra med den sats som förekom
i föregående kapitel:
.[code='Min Dator'] som är samma som products/product[code='Min
Dator'] men eftersom vi redan befann oss i products/product kontexten
så sätter vi istället en punkt
|
| racers/driver[@type="F1"] |
matchar alla driver noder där type attributet är F1
|
Matcha en specifik nod
| driver[0] |
matchar den första föraren. Som vanligt (inom data) är
0 det första elementet
|
| driver[nationality][2] |
Matchar den tredje (3) föraren som har en nationalitet
|
Parenteser
om vi har ett XML data med följande utseende:
<A>
<B/>
<B/>
</A>
<A>
<B/>
<B/>
</A>
så kommer
| A/B[0] |
att matcha den första B noden för varje A
medan
|
| (A/B)[3] |
matchar den tredje B noden i hela materialet. I vårt fall blir
det den första B i den andra A
och
|
| A[1]/B[1] |
matchar den andra B noden i den andra A
|
Matcha sista noden
| A[end()] |
matchar den sista A noden inom nuvarande kontext
|
| A/B[end()] |
matchar den sista B noden imon nuvarande A kontext
|
| A/B[end()] |
matchar den sista B noden i hela materialet
|