DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Andreas Rauch Artikel Drucken
        
Templates machen keine Freunde

Oft genaug bereiten templates Kopfzerbrechen.Nicht, daß sie für XSL Beginner relativ schwer zu begreifen sind, sondern sie machen dann auch noch ganz merkwürdige Dinge.

Sehen wir uns folgendes Beispiel mal genauer an:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="template.xsl" ?>
<!-- Readings for 2000-11-01 -->
<weather>
 <today>
  <temperature scale="F">76</temperature>
  <temperature scale="F">55</temperature>
  <humidity>67</humidity>
  <wind unit="mph">5</wind>
  <!-- No precipitation today -->
  <precip/>
 </today>
 <forecast day="+1">
  <temperature scale="F">81</temperature>
  <humidity>30</humidity>
  <wind unit="mph">10</wind>
  <precip>Rain</precip>
 </forecast>
 <forecast day="+2">
  <temperature scale="F">72</temperature>
  <humidity>60</humidity>
  <wind unit="mph">2</wind>
  <precip>Fog</precip>
 </forecast>
</weather>


In unserem XSL File wollen wir nur die Wetterwerte der nächsten Tage anzeigen lassen. Dazu verwenden wir folgendes XSL File:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"   
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/TR/REC-html40" >

<xsl:template match="forecast">
    <h2>Forecast for (Today <xsl:value-of select="@day"/>):</h2>
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="temperature">
    <p><b>Temperature:
        <xsl:value-of select="."/>&#x0a;<xsl:value-of select="@scale"/>
    </b></p>
</xsl:template>

<xsl:template match="humidity">
    <p><b>Relative humidity:
        <xsl:value-of select="."/>%
    </b></p>
</xsl:template>

</xsl:stylesheet>

UUPPS! Obwohl wir unsere templates sauber gemacht haben, sehen wir trotzdem die Werte der Elemente "precip" und "wind". Es kommt noch besser. Auch die Werte von "today" werden angezeigt.

Wir wollen aber nur die forecasts sehen. Wie sollen wir das anstellen?

Folgendes Beispiel funtkioniert!

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"   
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    xmlns="http://www.w3.org/TR/REC-html40" >

<xsl:template match="/weather/today" />

<xsl:template match="forecast">
    <h2>Forecast for  Today <xsl:value-of select="@day"/></h2>
    <xsl:apply-templates select="temperature|humidity"/>
</xsl:template>

<xsl:template match="temperature">
    <p><b>Temperature:
        <xsl:value-of select="."/>&#x0a;<xsl:value-of select="@scale"/>
    </b></p>
</xsl:template>

<xsl:template match="humidity">
    <p><b>Relative humidity:
        <xsl:value-of select="."/>
    </b></p>
</xsl:template>

</xsl:stylesheet>

Warum? Mit der Anweisung <xsl:template match="/weather/today" /> unterdrücken wir jegliche Ausgaben von temperature und humidity. Zusätzlich verwenden wir ausdrücklich die  templates "humidity" und "temperature" <xsl:apply-templates select="temperature|humidity"/> . Nur durch diesen kleinen Trick bringen wir xsl dazu nur gewünschte Werte auszugeben bzw. nur die angebenen Anweisungen der templates auszuführen.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 26.07.2001
  Gültig bis: 25.08.2001
14 Ratings
Bewertung: 50,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG