XSLT 2.0 <xsl:result-document>
verenice
- xsl
0 Thomas Meinike0 Thomas Meinike0 verenice0 Thomas Meinike0 Thomas J.S.0 verenice0 Thomas J.S.
Hallo,
ich möchte die Funktion xsl:result-document verwenden, um HTML-Seiten zu erzeugen.
Hier mein Test-Quelltext:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" version="1.0" encoding="ISO-8859-1" />
<xsl:template name="Test">
<xsl:result-document href="HalloWelt.html">
<html>
<head>
<title>Test</title>
</head>
<body>
<p>
Hallo Welt!
</p>
</body>
</html>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
Ich benutze Cooktop mit Saxon 8.5 (XSLT 2.0). Ich bekomme keine Fehlermeldung, aber meine HTML-Datei wird nicht erzeugt.
Wo liegt der Fehler? Was mache ich falsch?
Danke für Eure Hilfe!
Gruß, verenice
Hallo,
<xsl:output method="html" indent="yes" version="1.0" encoding="ISO-8859-1" />
HTML in der Version 1.0 ist nicht das Ziel, oder? Mit version ist die Version des Zielformats gemeint, z. B. 1.0 bei XHTML oder 4.01 bei HTML oder 1.1 bei SVG usw.
<xsl:template name="Test">
Das Template soll auf welche Inhalte passen? Es fehlt das match-Attribut.
<xsl:result-document href="HalloWelt.html">
...
</xsl:result-document>
Der Rest sollte durchaus funktionieren. Ansonsten mal beim Autor Michael Kay nachschlagen.
MfG, Thomas
[Anmerkung zur Praezisierung:]
HTML in der Version 1.0 ist nicht das Ziel, oder? Mit version ist die Version des Zielformats gemeint, z. B. 1.0 bei XHTML oder 4.01 bei HTML oder 1.1 bei SVG usw.
Auch bei SVG 1.1 steht dort 1.0, wenn XML 1.0 auszugeben ist (XML 1.1 eher seltener).
MfG, Thomas
Hallo, Thomas,
vielen Dank für Deine schnelle Antwort!:o)=
Ich habe jetzt alles geändert, wie Du es mir empfohlen hast, aber leider bekomme ich immer noch keine HTML-Datei mit Namen HalloWelt.html und in der Hallo Welt! angezeigt wird.
Und ich weiß wirklich nicht, woran es liegt.
Das Tool Cooktop, das ich verwende, müßte doch eigentlich mit Saxon 8.5 dazu fähig sein. Odeer?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" version="4.01" encoding="ISO-8859-1" />
<xsl:template match="/">
<xsl:result-document href="HalloWelt.html">
<html>
<head>
<title>Test</title>
</head>
<body>
<p>
Hallo Welt!
</p>
</body>
</html>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
Danke schon mal im voraus.
Gruß, verenice
Hallo,
Und ich weiß wirklich nicht, woran es liegt.
Das Tool Cooktop, das ich verwende, müßte doch eigentlich mit Saxon 8.5 dazu fähig sein. Odeer?
Verwende ich in dieser Konstellation nicht, aber mit XMLSpy 2005 erscheint die gewuenschte Ergebnisdatei "HalloWelt".
Probiere vielleicht mal die aktuelle Version Saxon 8.6.
MfG, Thomas
Hallo,
Und ich weiß wirklich nicht, woran es liegt.
Das Tool Cooktop, das ich verwende, müßte doch eigentlich mit Saxon 8.5 dazu fähig sein. Odeer?Verwende ich in dieser Konstellation nicht, aber mit XMLSpy 2005 erscheint die gewuenschte Ergebnisdatei "HalloWelt".
Probiere vielleicht mal die aktuelle Version Saxon 8.6.
Saxon 8.5.1 macht keine Probleme (8.6 auch nicht).
Es muss an der Konfiguration des Tools liegen. (einge haben voreingestellte Werte für den Namen der Ausgabedatei)
Grüße
Thomas
Hallo, vielen Dank für Eure Hilfe! Es hat jetzt endlich geklappt!*Freu*
Allerdings habe ich jetzt ein anderes Problem.
Hier mein Quelltext:
<xsl:result-document href="KapitelA.html">
<xsl:template match="Kapitel[@id='1']" name="KapitelA" priority="1.">
<p>
<h3>
<xsl:value-of select="KapitelUeberschrift" />
</h3>
<br />
<!-- Hier wird das Template aufgerufen, mit dem das Bild für dieses Kapitel geladen wird. -->
<xsl:apply-templates select="KapitelBild[@nr='1']" />
<br />
<xsl:value-of select="KapitelBild[@nr='1']" />
</p>
</xsl:template>
<!-- Hier wird das Bild für KapitelA aufgerufen. -->
<xsl:template match="KapitelBild[@nr='1']" name="BildKapitelA">
<img src="Bilder/{@src}" alt="{@src}" width="{@width}" heigth="@height" />
</xsl:template>
</xsl:result-document>
Bei der HTML-Datei, die erzeugt wird, wird nur die KapitelUeberschrift angezeigt und der Bildname. Leider wird nicht auf das interne CSS zu gegriffen und das Bild wird auch nicht angezeigt. Woran könnte das liegen?
Vielen Dank schon mal für Eure Hilfe!
Gruß, verenice
Hallo,
<xsl:result-document href="KapitelA.html">
<xsl:template match="Kapitel[@id='1']" name="KapitelA" priority="1.">
<p>
<h3>
<xsl:value-of select="KapitelUeberschrift" />
</h3>
<br /><!-- Hier wird das Template aufgerufen, mit dem das Bild für dieses Kapitel geladen wird. -->
<xsl:apply-templates select="KapitelBild[@nr='1']" />
<br />
<xsl:value-of select="KapitelBild[@nr='1']" />
</p>
</xsl:template><!-- Hier wird das Bild für KapitelA aufgerufen. -->
<xsl:template match="KapitelBild[@nr='1']" name="BildKapitelA">
Es ist überflüssig "[@nr='1']" zu verwenden, da du beim apply-templates das Template explizit nur für "[@nr='1']" aufrufst. So kannst du dir eine Menge redudanten Templates sparen.
Aus sonst erscheint mir, dass du sehr viel unnötig codest, denn du kannst deine Templates mit Paramter versehen, diese entsprechnd beim Aufruf setzen und dann brauchst du mehrfache Templates die eigentlich alle dasselbe machen.
<img src="Bilder/{@src}" alt="{@src}" width="{@width}" heigth="@height" />
</xsl:template>
</xsl:result-document>Bei der HTML-Datei, die erzeugt wird, wird nur die KapitelUeberschrift angezeigt und der Bildname. Leider wird nicht auf das interne CSS zu gegriffen und das Bild wird auch nicht angezeigt. Woran könnte das liegen?
Zu CSS: dein Ergebnisdokument beginnt mit <p>, d.h. alles was vorher in der HTML-Datei stehen sollte fehlt.
Zu Bild: überprüfe wohin dein KapitelA.html gespeichert wird, von dem Verzeichnis aus gesehen wird der Pfad zum Bild gesetzt.
Außerdem ist dein Tamplge nicht korrekt: --> heigth="@height".
Und außerdem, sind die Infos (der Code) leider zu wenig um alles nachvollziehen zu können.
Grüße
Thomas
Hallo Thomas,
vielen Dank für Deine schnelle Antwort!:o)
Zu CSS: dein Ergebnisdokument beginnt mit <p>, d.h. alles was vorher in der HTML-Datei stehen sollte fehlt.
Das steht im Stylesheet weiter oben. Siehe Quelltext unten.
Zu Bild: überprüfe wohin dein KapitelA.html gespeichert wird, von dem Verzeichnis aus gesehen wird der Pfad zum Bild gesetzt.
Außerdem ist dein Tamplge nicht korrekt: --> heigth="@height".
Oh, danke! Der Fehler ist mir noch gar nicht aufgefallen.
Und außerdem, sind die Infos (der Code) leider zu wenig um alles nachvollziehen zu können.
Hier mein Quelltext:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" indent="yes" encoding="ISO-8859-1" />
<!-- Startvorlage-->
<xsl:template match="/">
<html>
<head>
<title>Dokumentation zum Konstruktionsprozeß Vobes-Plus</title>
<!-- interne CSS -->
<style type="text/css">
h1 {
font-size: large; /* 30pt */
font-family: Arial;
}
h3 {
color: blue; /* Warning: To help avoid conflicts with user style sheets, background and color properties should be specified together. */
font-size: large; /* 25pt */
font-family:Arial;
}
hr {
width:100%;
color: red;
}
p {
font-size: xx-large; /* 30pt */
font-family:Arial;
white-space:normal; /*white-space erzeugt einen Textumbruch normal wie in HTML*/
margin-left:30px;
margin-right:55px;
}
body{
margin-left: 100px;
margin-right: 100px;
}
</style>
</head>
<body>
<h1>Dokumentation</h1>
<p>
<xsl:apply-templates select="Konstruktionsprozeß/Dokumentation/Kapitel" />
<xsl:apply-templates select="Konstruktionsprozeß/Dokumentation/FormaleErschließung" />
</p>
</body>
</html>
</xsl:template>
<xsl:result-document href="KapitelA.html">
<xsl:template match="Kapitel[@id='1']" name="KapitelA" priority="1.">
<p>
<h3>
<xsl:value-of select="KapitelUeberschrift" />
</h3>
<br />
<!-- Hier wird das Template aufgerufen, mit dem das Bild für dieses Kapitel geladen wird. -->
<xsl:apply-templates select="KapitelBild[@nr='1']" />
<br />
<xsl:value-of select="KapitelBild[@nr='1']" />
</p>
</xsl:template>
<!-- Hier wird das Bild für KapitelA aufgerufen. -->
<xsl:template match="KapitelBild[@nr='1']" name="BildKapitelA">
<img src="Bilder/{@src}" alt="{@src}" width="{@width}" heigth="{@height}" />
</xsl:template>
</xsl:result-document>
<xsl:template match="Kapitel[@id='2']" name="KapitelB" priority="2.">
<p>
<h3>
<xsl:value-of select="KapitelUeberschrift" />
</h3>
<br />
<xsl:value-of select="KapitelText" />
</p>
</xsl:template>
</xsl:stylesheet>
Vielleicht kannst Du mir jetzt einen Tip geben, woran es liegen könnte, dass das CSS nicht funktioniert.
Die Grafiken liegen übrigens im Ordner Bilder. Den Pfad habe ich bei den Bildern angegeben. Vorher, als ich noch nicht xsl:result-document benutzt habe, wurden die Bilder auch angezeigt. Nur jetzt nicht.:-/
Vielen Dank schon mal im voraus.
Gruß, verenice
Hallo,
Zu CSS: dein Ergebnisdokument beginnt mit <p>, d.h. alles was vorher in der HTML-Datei stehen sollte fehlt.
Das steht im Stylesheet weiter oben. Siehe Quelltext unten.
So funktioniert aber das nicht, result-document funktioniert nicht so.
Und außerdem, sind die Infos (der Code) leider zu wenig um alles nachvollziehen zu können.
Hier mein Quelltext:
OK, (ist nicht böse gemeint, sondern nur eine Feststellung) dein Stylesheet kann so überhaupt nicht funktioneren.
Willst du HTML erzegen gehört "xmlns:fo="http://www.w3.org/1999/XSL/Format" weg.
xsl:result-document darf nicht als Kind vom xsl:stylesheet auftreten.
xsl:result-document darf nicht xsl:template als Kind enthalten.
Du möchtest zwar mehrere Dokumente erzeugen, aber jedoch willst du nur ein Dokument haben, so kann das natürlich nicht funktioneren.
Ich habe mit einer dummy-xml:
------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Konstruktionsprozeß>
<Dokumentation>
<Kapitel id="1">
<KapitelUeberschrift>Kapitel 1</KapitelUeberschrift>
<KapitelText></KapitelText>
<KapitelBild nr="1" src="kap11.gif" width="100" height="75">Kap 1 Bild 1</KapitelBild>
</Kapitel>
<Kapitel id="2">
<KapitelUeberschrift>Kapitel 2</KapitelUeberschrift>
<KapitelText></KapitelText>
<KapitelBild nr="1" src="kap21.gif" width="100" height="75">Kap 2 Bild 1</KapitelBild>
<KapitelBild nr="1" src="kap22.gif" width="100" height="75">Kap 2 Bild 2</KapitelBild>
</Kapitel>
<FormaleErschließung>
FormaleErschließung
</FormaleErschließung>
</Dokumentation>
</Konstruktionsprozeß>
---------------------------------------
und mit dem folgenden Stylesheet:
---------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="ISO-8859-1" indent="yes" method="html"/>
<!-- Startvorlage-->
<xsl:template match="/Konstruktionsprozeß/Dokumentation/Kapitel">
<xsl:result-document href="Kapitel{@id}.html">
<html>
<head>
<title>Dokumentation zum Konstruktionsprozeß Vobes-Plus</title>
<!-- interne CSS -->
<style type="text/css"> h1 { font-size: large; /* 30pt */ font-family: Arial; } h3 { color: blue; /* Warning: To help avoid conflicts with user style sheets, background and color properties should be specified together. */ font-size: large; /* 25pt */ font-family:Arial; } hr { width:100%; color: red; } p { font-size: xx-large; /* 30pt */ font-family:Arial; white-space:normal;
/*white-space erzeugt einen Textumbruch normal wie in HTML*/ margin-left:30px; margin-right:55px; } body{ margin-left: 100px; margin-right: 100px; } </style>
</head>
<body>
<h1>Dokumentation</h1>
<h3>
<xsl:value-of select="KapitelUeberschrift"/>
</h3>
<xsl:apply-templates select="KapitelText"/>
<br/>
<xsl:apply-templates select="KapitelBild"/>
<br/>
</body>
</html>
</xsl:result-document>
</xsl:template>
<xsl:template match="KapitelBild">
<img alt="{@src}" heigth="{@height}" src="Bilder/{@src}" width="{@width}"/>
</xsl:template>
<xsl:template match="KapitelText">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
</xsl:stylesheet>
-------------------------------------------
Die Dokumente erzuegen können:
-------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Dokumentation zum Konstruktionsprozeß Vobes-Plus</title><style type="text/css"> h1 { font-size: large; /* 30pt */ font-family: Arial; } h3 { color: blue; /* Warning: To help avoid conflicts with user style sheets, background and color properties should be specified together. */ font-size: large; /* 25pt */ font-family:Arial; } hr { width:100%; color: red; } p { font-size: xx-large; /* 30pt */ font-family:Arial; white-space:normal;
/*white-space erzeugt einen Textumbruch normal wie in HTML*/ margin-left:30px; margin-right:55px; } body{ margin-left: 100px; margin-right: 100px; } </style></head>
<body>
<h1>Dokumentation</h1>
<h3>Kapitel 1</h3>
<p></p><br><img alt="kap11.gif" heigth="75" src="Bilder/kap11.gif" width="100"><br></body>
</html>
----------------------------------------------
Prozessor ist Saxon 8.6 bzw. der XSLT2-Prozessor in XML-Spy.
Was ist dein Ziel was du erreichen möchtest?
Grüße
Thomas
Hallo Thomas,
nochmals, vielen Dank für Deine Hilfe!:o)
Was ist dein Ziel was du erreichen möchtest?
Jedes Kapitel der Doku hat ein eigenes Template. Diese Templates sind derzeit in einer Datei. Ich dachte, dass ich jetzt aus dieser XSL-Datei für jedes Template eine HTML-Datei erzeugen kann mit xsl:result-document.
Das geht anscheinend nicht, oder?
Muß ich jetzt wirklich für jedes Template eine XSL-Datei anlegen, da ich sonst mit xsl:result-document nicht die HTML-Seite erzeugen könnte?
Wenn das wirklich so ist, dann habe ich noch ein Problem. Eigentlich wollte ich eine externe CSS nehmen, damit diese nur einmal vorhanden ist und schnell geändert werden kann. Leider hat das Einbinden der externen CSS nicht funktioniert, daher habe ich es erstmal mit einer internen CSS probiert.
Was ist denn hieran falsch?
<link rel="stylesheet" type="text/css" href="cssTemplatesKapitel.css" />
Schon mal vielen Dank im voraus.
Gruß, verenice
Hallo Thomas,
meine Einbindung des externen StyleSheets funktioniert mit Deiner korrigierten Version jetzt doch.*freu* Dank!
Allerdings kann ich mit Cooktop jetzt wieder nicht die HTML-Seiten mit xsl:result-document erzeugen, da ich die folgende Fehlermeldung erhalte:
"XML-Deklaration darf nur am Beginn von Entitäten stehen.
Transformation failed: Run-time errors were reported."
Kannst Du mir hierbei eventuell auch weiterhelfen?
Danke schon mal im voraus.
Gruß, verenice
Hallo,
das mit der Fehlermeldung hat sich jetzt auch schon erledigt.
Gruß, Vere
Hallo Thomas,
wollte nur kurz mitteilen, dass jetzt auch xsl:result-document bei mir prima funktioniert.
Vielen Dank!!!!
Gruß, verenice
Hallo verenice,
wollte nur kurz mitteilen, dass jetzt auch xsl:result-document bei mir prima funktioniert.
Vielen Dank!!!!
Alles klar und gern geschehen! :)
Grüße
Thomas