Das Söhnchen: XML --> XHTML?

Hallo zusammen,

ich versuche, aus einer vorliegenden XML-Datei mit Hilfe von XSL standardkonformes XHTML zu erzeugen. Dabei stehe ich derzeit vor 2 Problemen:

1. Dateikopf:

Laut Selfhtml sollte ein ordentlicher XHTML-Kopf etwa folgendermaßen aussehen:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head> ...

Nach einigem Suchen im Archiv habe ich hierzu die folgende XML-Anweisung gefunden, die genau das generiert:

<xsl:output
    method="html"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    encoding="ISO-8859-1"
    omit-xml-declaration="no"
    version="1.0" />

Das funktioniert auch, allerdings wird die Anweisung omit-xml-declaration="no" nur dann beachtet, wenn method="xml" angegeben wird.

Wie gehe ich hier richtig vor, um sowohl die Zeile

<?xml version="1.0" encoding="ISO-8859-1" ?>

als auch den richtigen doctype zu generieren?

2. Javascript-Bereich:

Laut selfhtml sind javascript-Bereiche in XHTML so zu definieren:

<script type="text/javascript">
// <![CDATA[
...
// ]]>
</script>

Hier habe ich bisher mittels xsl:text versucht, dies zu generieren - aber bisher erfolglos. Meist interpretiert saxon hier die schließenden eckigen Klammern als - was auch immer - , und beschwert sich über ein erwartetes </xsl:text> anstatt </string>. Auch meine Versuche mit Entitäten waren bisher nicht von Erfolg gekrönt.
Ein Auslagern des javascript-Bereiches ist in diesem Fall meiner Meinung nach nicht sinnvoll, da lediglich eine Variable gesetzt wird, die von einem Script, welches in verschiedene Seiten eingebunden ist, ausgewertet wird.
Was kann ich hier tun?

Vielen Dank im Voraus und viele Grüße

Das Söhnchen

  1. Hi,

    Laut Selfhtml sollte ein ordentlicher XHTML-Kopf etwa folgendermaßen aussehen:

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    AFAIK erwähnt SelfHTML auch, dass der IE hieran scheitert.

    Das funktioniert auch, allerdings wird die Anweisung omit-xml-declaration="no" nur dann beachtet, wenn method="xml" angegeben wird.

    Naja, Du willst ja auch XML erzeugen, nicht HTML.

    Wie gehe ich hier richtig vor, um sowohl die Zeile
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    als auch den richtigen doctype zu generieren?

    Du erzeugst XML. Und Du möchtest die XML-Deklaration vermeiden.

    Laut selfhtml sind javascript-Bereiche in XHTML so zu definieren:
    <script type="text/javascript">
    // <![CDATA[

    AFAIK erwähnt SelfHTML auch, dass es hierbei in diversen Browsern Probleme gibt.

    Hier habe ich bisher mittels xsl:text versucht, dies zu generieren - aber bisher erfolglos. Meist interpretiert saxon hier die schließenden eckigen Klammern als - was auch immer -

    Als CDATA im XSLT-Code, vermute ich.

    Was kann ich hier tun?

    Auf die Deklaration von CDATA verzichten.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. <?xml version="1.0" encoding="ISO-8859-1" ?>

      AFAIK erwähnt SelfHTML auch, dass der IE hieran scheitert.

      Was meinst Du hiermit genau? In den Seiten über die Unterschiede von HTML und XHTML finde ich nur, dass man die Deklaration als XML weglassen kann, wenn man die Seite als html ausliefert...

      Naja, Du willst ja auch XML erzeugen, nicht HTML.

      Hier hatte ich einen Denkfehler.

      Du erzeugst XML. Und Du möchtest die XML-Deklaration vermeiden.

      Okay. So klappt es.

      Laut selfhtml sind javascript-Bereiche in XHTML so zu definieren:
      <script type="text/javascript">
      // <![CDATA[

      AFAIK erwähnt SelfHTML auch, dass es hierbei in diversen Browsern Probleme gibt.

      Dazu habe ich nichts gefunden.

      Hier habe ich bisher mittels xsl:text versucht, dies zu generieren - aber bisher erfolglos. Meist interpretiert saxon hier die schließenden eckigen Klammern als - was auch immer -

      Als CDATA im XSLT-Code, vermute ich.

      Was kann ich hier tun?

      Auf die Deklaration von CDATA verzichten.

      *grummel* So geht es natürlich auch... - solange ich im Scriptbereich keine "<"-Klammer benutze.
      (So interpretiere ich an dieser Stelle selfhtml. Wenn das falsch ist, bitte berichtigen)

      Cheatah

      Das Söhnchen

  2. Hallo,

    Wie gehe ich hier richtig vor, um sowohl die Zeile

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    als auch den richtigen doctype zu generieren?

    Da XHTML eine XML-Anwendung ist, gilt:

    <xsl:output method="xml" ... />

    Was kann ich hier tun?

    <script type="text/javascript">  
     <xsl:text disable-output-escaping="yes">// &lt;</xsl:text><xsl:text>![CDATA[</xsl:text>  
    ...  
    <xsl:text disable-output-escaping="yes">// ]]></xsl:text>
    

    Alternativ cdata-section-elements="script" zu xsl:output hinzufuegen, wobei dann die "//"-Zeichen in der Ausgabe fehlen.

    MfG, Thomas

    1. [Nachtrag:]

      <xsl:text disable-output-escaping="yes">// ]]></xsl:text>

      Hier besser so verfahren, da die einen CDATA-Abschnitt beendende Zeichenkette "]]>" noch direkt vorkommt:

      <xsl:text>// ]</xsl:text><xsl:text disable-output-escaping="yes">]></xsl:text>

      MfG, Thomas

      1. Hier besser so verfahren, da die einen CDATA-Abschnitt beendende Zeichenkette "]]>" noch direkt vorkommt:

        <xsl:text>// ]</xsl:text><xsl:text disable-output-escaping="yes">]></xsl:text>

        MfG, Thomas

        Vielen Dank für die Hilfe. So funktioniert es!

        Gruß

        Das Söhnchen