Doctype fehlt - Jdom XML/XSLT -> HTML
Maike
- java
0 Thomas Meinike0 Maike0 Martin Speiser0 Maike
0 Thomas Meinike0 Maike
0 gant0 Maike
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
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
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.
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
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. :-/
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
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.
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 " "> <!-- 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
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...