Announcement

Collapse
No announcement yet.

omit-xml-declaration="no" funktioniert nicht!?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • omit-xml-declaration="no" funktioniert nicht!?

    Bei selfhtml findet man folgendes zum Attribut omit-xml-declaration (für den xslt Tag "output"):
    (optional) bestimmt bei method="xml", ob im Ergebnisbaum eine Seite XML-Deklaration (<?xml ...?>) ausgegeben werden soll oder nicht. Mögliche Werte sind yes für nein (omit = weglassen) oder no für ja (nicht weglassen).
    Ich habe jetzt schon beides probiert. Ob dort drin steht "yes" oder eben "no" spielt keine Rolle, bei mir schreibt der keine XML-Deklaration an den Anfang des Dokument (nat. auch an keine andere Stelle).

    Da ich einen RSS Feed erzeugen will, benötige ich aber diese Deklaration am Anfang.

    Ich habe mal mein Beispiel etwas verkürzt:
    Die XML Datei:
    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="rss.xsl"?>
    <document>
    	<articles paging="5">
    		<article>
    			<key>xml-um-xml-erweitern</key>
    			<added rss="Wed, 27 Feb 2008 22:18:20 +0100">1204147100</added>
    			<headline>Ueberschrift</headline>
    			<text>Inhalt</text>
    		</article>
    	</articles>
    </document>
    Die XSLT Datei:
    HTML Code:
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <xsl:stylesheet
    	version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:atom="http://www.w3.org/2005/Atom"
    >
    	<xsl:output
    		method="xml"
    		version="1.0"
    		indent="yes"
    		encoding="UTF-8"
    		omit-xml-declaration="no"
    	/>
    	
    	<xsl:template match="document">
    		<rss version="2.0">
    			<channel>
    				<title>Titel</title>
    				<link>http://example.com</link>
        			<description>Bla...</description>
    				<language>de-de</language> 
    				<copyright>...</copyright> 
    				<managingEditor>...</managingEditor> 
    				<webMaster>...</webMaster>
    				
    				<xsl:apply-templates select="articles"/>
    			</channel>
    		</rss>
    	</xsl:template>
    	
    	<xsl:template match="articles">
    		<xsl:apply-templates select="article" />
    	</xsl:template>
    	
    	<xsl:template match="article">
    		<item>
    			<guid>
    				<xsl:value-of select="key" />
    			</guid>
    			<xsl:apply-templates select="added" />
    			<xsl:apply-templates select="headline" />
    			<description><xsl:apply-templates select="text" /></description>
    		</item>
    	</xsl:template>
    	
    	<xsl:template match="added">
    		<pubDate><xsl:value-of select="@rss" /></pubDate>
    	</xsl:template>
    	
    	<xsl:template match="headline">
    		<title><xsl:value-of select="." /></title>
    	</xsl:template>
    	
    	<xsl:template match="text">
    		<xsl:apply-templates />
    	</xsl:template>
    	
    </xsl:stylesheet>
    Das generierte Ergebnis sieht nun so aus:
    HTML Code:
    <rss version="2.0">
    	<channel>
    		<title>Titel</title>
    		<link>http://example.com</link>
    		<description>Bla...</description>
    		<language>de-de</language>
    		<copyright>...</copyright>
    		<managingEditor>...</managingEditor>
    		<webMaster>...</webMaster>
    		<item>
    			<guid>xml-um-xml-erweitern</guid>
    			<pubDate>Wed, 27 Feb 2008 22:18:20 +0100</pubDate>
    			<title>Ueberschrift</title>
    			<description>Inhalt</description>
    		</item>
    	</channel>
    </rss>
    Wir aber wegen der fehlenden XML Deklaration nicht als RSS Feed erkannt bzw. angezeigt.

    Nun meine Frage. Was mach ich falsch? Wie bekomme ich den Browser dazu, die Deklaration an den Anfang zu schreiben?

    Ich habe die 2 Dateien mal mit angehängt.

    Danke im voraus,
    Markus
    Attached Files

  • #2
    Mit welchem Prozessor wird transformiert? Die "omit-xml-declaration"-Angabe kann auch weggelassen werden, da der Default-Wert bereits "no" ist.

    Comment


    • #3
      Wenn ich es mit PHP mache, funktioniert es.

      Ich will es aber direkt vom Browser machen lassen. Probiert mit FF3, IE7 und Safari3. KA welchen Prozessor die nutzen?

      Comment


      • #4
        Probiere es noch mit media-type="application/rss+xml" bei xslutput, aber viel Hoffnung habe ich clientseitig in dieser Form nicht, außer über die Transformation mittels JavaScript.

        Ansonsten mal probieren, das XSLT-Stylesheet direkt ins XML-Dokument zu integrieren.

        Comment


        • #5
          Originally posted by Thomas Meinike View Post
          Probiere es noch mit media-type="application/rss+xml" bei xslutput, aber viel Hoffnung habe ich clientseitig in dieser Form nicht, außer über die Transformation mittels JavaScript.

          Ansonsten mal probieren, das XSLT-Stylesheet direkt ins XML-Dokument zu integrieren.
          Das mit dem media-type funktioniert leider nicht und JavaScript und inline XSLT sind leider keine Alternative.

          Aber der Tipp mit dem media-type hat mich dazu veranlagt etwas zu überprüfen. Denn ich baue die XML Dynamisch mit PHP zusammen und sende auch einen header mit dem Content-type.
          Ich hatte aber bis eben für RSS folgenden Header gesendet:
          PHP Code:
          header('Content-type: application/xml'); 
          Vielleicht funktioniert es ja mit
          PHP Code:
          header('Content-type: application/rss+xml'); 
          Jedoch schmiert dabei gerade mein PHP ab. Liegt wohl daran, dass das die dev Version von PHP5.3 ist.

          Danke auf jeden für die Hinweise ich werde mal schon ob letzteres jetzt noch funktioniert.

          Markus

          Comment


          • #6
            Wenn das XML mittels PHP erzeugt wird, dann würde ich die Transformation ebenfalls damit machen, denn an dieser Stelle hat man noch die volle Kontrolle. XSLT im Browser erachte ich nur in kontrollierten Umgebungen als brauchbar, also auf dem eigenen Rechner oder im Intranet.

            Comment


            • #7
              Originally posted by Thomas Meinike View Post
              Wenn das XML mittels PHP erzeugt wird, dann würde ich die Transformation ebenfalls damit machen, denn an dieser Stelle hat man noch die volle Kontrolle. XSLT im Browser erachte ich nur in kontrollierten Umgebungen als brauchbar, also auf dem eigenen Rechner oder im Intranet.
              Stimme ich dir an sich voll und ganz zu. Ich habe von dieser Templateengine, falls man es so nennen kann, schon eine Version, welche komplett über PHP arbeitet. Wollte jedoch aus Test- und Lernzwecken eine abgewandelte Version erstellen, welche das ganze clientseitig macht.

              Ich habe zwar inzwischen fast die Hoffnung verloren, aber vllt wird es ja doch voll funktionsfähig in allen gängigen Browsern.

              Comment

              Working...
              X