Maike: Doctype fehlt - Jdom XML/XSLT -> HTML

Hallo,
ich habe ein XML-File, das mit XSL zu einem HTML-Dokument transformiert wird.
Jetzt soll das XML-File in einem Java-Servlet mittels JDom ausgelesen und an den Browser gesendet werden. Das funktioniert auch schon alles prima. Das Problem ist nur, dass in dem erzeugten HTML-Dokument der Doctype fehlt. Stattdessen steht in der ersten Zeile:
<?xml version="1.0" encoding="UTF-8"?>

Ich möchte aber dass dort das steht:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

Wie kann ich das machen?
Hier der Java-Code:
-----------
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(XSLPath));
JDOMResult out = new JDOMResult();
JDOMSource source = new JDOMSource(new SAXBuilder().build(XMLPath)) ;
transformer.transform(source,out);
XMLOutputter xmlOut = new XMLOutputter();
xmlOut.output('Document-Objekt', 'PrintWriter-Objekt');
-----------

Danke,
Gruß Maike

  1. Hallo,

    Ich möchte aber dass dort das steht:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    Wie kann ich das machen?

    Verwende xsl:output innerhalb des Stylesheets, z. B.:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output
        method="html"
        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
        encoding="ISO-8859-1"
        version="4.01"
        indent="yes"
    />

    <!-- der Rest des Stylesheets -->

    Fuege diese Zeile ein, falls die DTD-Referenz ebenfalls ausgegeben werden soll:
    doctype-system="http://www.w3.org/TR/html401/loose.dtd"

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
    1. Hallo Thomas,

      Verwende xsl:output innerhalb des Stylesheets, z. B.:

      Das habe ich schon, hier der Kopf meiner XSL-Datei:
      <?xml version="1.0" encoding="ISO-8859-1"?>
      <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd"
      doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" encoding="ISO-8859-1" indent="yes"/>

      Damit klappt's immer noch nicht. Es ist auch komisch, wenn ich die XML Datei einfach so im Browser aufrufe und mir den Quelltext ansehe, dann sehe ich das XML-Dokument. Wenn ich das ganze über Java mache, ist die Ausgabe zwar gleich, aber im Quelltext steht HTML-Code und dazu passt diese <?xml... Zeile nunmal nicht :-/

      Vielleicht ist in der Java-Klasse irgendwas falsch..

      Danke für deine Hilfe.

      1. Hi Maike,

        Wenn ich das ganze über Java mache, ist die Ausgabe zwar gleich, aber im Quelltext steht HTML-Code und dazu passt diese <?xml... Zeile nunmal nicht :-/

        füge an das xsl:output Element noch das Attribut omit-xml-declaration="yes" an. Dann sollte die XML-Deklaration verschwunden sein.

        Gruß,
        Martin

        1. füge an das xsl:output Element noch das Attribut omit-xml-declaration="yes" an. Dann sollte die XML-Deklaration verschwunden sein.

          Vielen Dank, hab das eingefügt, doch leider ändert sich dadurch gar nichts. Die XML-Deklaration bleibt trotzdem stehn. :-/

      2. Hallo,

        <xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd"
        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" encoding="ISO-8859-1" indent="yes"/>

        Damit klappt's immer noch nicht.

        Dann ignoriert der verwendete XSLT-Prozessor vielleicht die Angaben zu xsl:output, was durchaus denkbar ist:

        "If an XSLT processor outputs the result tree, it should do so as specified by the xsl:output element; however, it is not required to do so." [http://www.w3.org/TR/xslt#output]

        Setze mal zusaetzlich dieses Attribut fuer xsl:output, um die XML-Deklaration im Ergebnis zu vermeiden:
        omit-xml-declaration="yes"

        BTW: Versteht der Prozessor bereits XSLT 2.0, wie im vorigen Posting mit version="2.0" angegeben?

        MfG, Thomas

        --
        SVG - Learning By Coding
        http://svglbc.datenverdrahten.de/
        1. Danke, scheint aber wirklich so zu sein, dass der XSLT-Prozessor die Angaben ignoriert. Anders kann ich mir nicht erklären, warum das nicht geht!
          So ein Mist...

          Setze mal zusaetzlich dieses Attribut fuer xsl:output, um die XML-Deklaration im Ergebnis zu vermeiden:
          omit-xml-declaration="yes"

          Habe ich versucht, aber die XML-Deklaration erscheint immer noch :-/

          BTW: Versteht der Prozessor bereits XSLT 2.0, wie im vorigen Posting mit version="2.0" angegeben?

          Ich habe jetzt version 1.0 angegeben. Ändert sich aber nichts.

  2. Hallo

    Ich hab das so gelöst, funktioniert auch, zumindest unter tomcat / IE:

    Mein XSL-Template sieht folgendermassen aus:

    <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
    <!DOCTYPE xsl:stylesheet [
    <!ENTITY nbsp "&#xa0;"> <!-- declare HTML value of the entity -->
    ]>

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" indent="no" encoding="ISO-8859-1"/>
    <xsl:template match="dokument">
    <html>
    <head>
    .....

    Hoffe, dies hilft.

    Grüsse
    gant

    1. Hallo,

      Ich hab das so gelöst, funktioniert auch, zumindest unter tomcat / IE:

      danke, aber wenn ich diese Zeilen in mein XSL-Dokument einfüge, kommen unendlich viele Tomcat-Fehler, wie z.b.:

      [Error] index.xsl:6:80: Element type "xsl:stylesheet" must be declared.
      [Error] index.xsl:7:62: Element type "xsl:output" must be declared.
      [Error] index.xsl:10:25: Element type "xsl:template" must be declared.
      [Error] index.xsl:11:8: Element type "html" must be declared.
      [Error] index.xsl:12:8: Element type "head" must be declared.
      [Error] index.xsl:13:75: Element type "meta" must be declared.
      [Error] index.xsl:14:9: Element type "title" must be declared.
      [Error] index.xsl:15:76: Element type "link" must be declared.
      [Error] index.xsl:18:26: Element type "body" must be declared.

      Was kann das bedeuten?? Vielleicht ein Klammerfehler...