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