XML + XSLT in IE7 u. Firefox 2.0



  • Hallo!

    Ich habe gerade ein wenig auf der englischen Wikipedia rumgesurft und dann die Beispiele für XSLT entdeckt:

    XML

    <?xml version="1.0" ?>
    <persons>
      <person username="JS1">
        <name>John</name>
        <family_name>Smith</family_name>
      </person>
      <person username="MI1">
        <name>Morka</name>
        <family_name>Ismincius</family_name>
      </person>
    </persons>
    

    XLST

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:template match="/persons">
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head> <title>xsl wiki ex.</title> </head>
            <body>
                    <h1>Persons</h1>
                    <ul> 
                    <xsl:apply-templates select="person">
                            <xsl:sort select="family_name" />
                    </xsl:apply-templates>
                    </ul>
            </body>
            </html>        
    </xsl:template>
    
    <xsl:template match="person">
            <li>
                    <xsl:value-of select="family_name"/>, 
                    <xsl:value-of select="name"/>           
            </li>        
    </xsl:template>
    
    </xsl:stylesheet>
    

    Das Ergebnis soll so ausschauen:

    <?xml version="1.0" encoding="UTF-8"?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head> <title>xsl wiki ex.</title> </head>
    <body>
            <h1>Persons</h1>
            <ul>
               <li>Ismincius, Morka</li>
               <li>Smith, John</li>
            </ul>
    </body>
    </html>
    

    Erste Frage:
    Woher weiß die XML-Datei, welches Stylesheet es verwenden soll? Muss nicht in die XML-Datei noch sowas wie <?xml-stylesheet type='text/xsl' href='blablub.xsl' version='1.0'?> eingefügt werden?

    Zweite Frage:
    Es ist ja weitläufig bekannt, dass sich die Browser gänzlich unterscheiden. Ich konnte es nur mit IE7 und Firefox 2.0 testen. Aber der IE rendert die Ausgabe so, wie oben "erwartet", schön mit einer ungeordneten Liste mit 2 Listen Elementen. Der Firefox hingegen gibt die beiden Namen hintereinander ohne ZwischenRäume aus (IsminciusMorkaSmithJohn). Ist das normal oder macht einer der Browser etwas nicht richtig? Oder mache ich etwas nicht richtig?

    Für Informationen wäre ich dankbar.



  • Der, der fragen tut! schrieb:

    Woher weiß die XML-Datei, welches Stylesheet es verwenden soll? Muss nicht in die XML-Datei noch sowas wie <?xml-stylesheet type='text/xsl' href='blablub.xsl' version='1.0'?> eingefügt werden?

    Die XML-Datei muss es gar nicht wissen. Aber der XSLT-Prozessor schon - und wenn der z.B. ein Browser ist, dann musst du definitiv ein xml-stylesheet verwenden um die XSL-Datei anzugeben.

    Ist das normal oder macht einer der Browser etwas nicht richtig? Oder mache ich etwas nicht richtig?

    Einer der beiden Browser macht etwas nicht richtig. Rate mal welcher. Ich verrate es gleich: natürlich der unfähige Internet Explorer. Das Problem ist der Namespace im html-Tag. Das Template "person" liegt "außerhalb" und muss dies auch im Namespace anzeigen. Das Ergebnis der Transformation lautet deswegen:

    <?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>xsl wiki ex.</title></head>
    <body><h1>Persons</h1><ul><li [b]xmlns=""[/b]>Ismincius,
                    Morka</li><li [b]xmlns=""[/b]>Smith,
                    John</li></ul></body></html>
    

    Und eben nicht was du annimmst. Dadurch ist <li> aber explizit als Nicht-XHTML gekennzeichnet. Der Firefox reagiert darauf völlig richtig indem er sagt "kenn ich nicht, keine Ahnung wie ich's darstellen soll". Der IE dagegen macht, was er immer macht: Standards ignorieren.
    Am einfachsten ist es, wenn du das xmlns-Attribut aus dem html-Tag entfernst. Es ist sowieso kein brauchbares XHTML. Wenn du aber wirklich XHTML verwenden willst, solltest du dich vielleicht in Namespaces einlesen 🙂


Anmelden zum Antworten