XML/XSLT - META-Problem, ENTITY-Problem, allg.
zipdrive
- xsl
Hallo ich habe ein Problem mit XSLT.
Vorweg, ich will wissen, warum für den Ausdruck orginal nicht der Wert aus dem Entity eingefügt wird, warum er, wenn ich META-Angaben mache sagt, dass sie ENTITIES sein müssen und warum <xsl:element name="title"><xsl:value-of select="@titel" /></xsl:element> nicht angewendet wird?!
Ich hoffe mal ihr könnt mir da weiterhelfen!!!
Ich habe mir diesen Code geschrieben:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE maschine SYSTEM "dtd/welcome.dtd">
<?xml-stylesheet type="text/xsl" href="xsl/welcome.xsl"?>
<welcome titel="Eisenbahnclub Leinefelde e.V.">
<text>Willkommen auf den Webseiten des</text>
<logo quelle="orginal" alternative="Eisenbahnclub Leinefelde e.V." />
</welcome>
---
<!NOTATION png PUBLIC '-//TEI//NOTATION IETF RFC2083 Portable Network Graphics//EN'>
<!ENTITY orginal SYSTEM "./graphics/logo-orginal.png" NDATA png>
<!ELEMENT welcome (text, logo)>
<!ELEMENT text (#CDATA)>
<!ELEMENT logo EMPTY>
<!ATTLIST welcome
titel CDATA #REQUIRED
<!ATTLIST logo
quelle ENTITY #REQUIRED
alternative CDATA #REQUIRED
---
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output media-type="text/html" method="html" />
<xsl:template match="/">
<html>
<head>
<xsl:element name="title"><xsl:value-of select="@titel" /></xsl:element>
</head>
<body style="margin-left:auto;margin-right:auto;padding:0px;text-align:center;font-family:arial;font-size:2em;font-weight:bold">
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="text">
<p style="margin:0px;padding:0px"><xsl:value-of select="." /></p>
</xsl:template>
<xsl:attribute-set name="LOGO">
<xsl:attribute name="src"><xsl:value-of select="@quelle" /></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="@alternative" /></xsl:attribute>
<xsl:attribute name="height">184px</xsl:attribute>
<xsl:attribute name="width">541px</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="logo">
<xsl:element name="img" use-attribute-sets="LOGO" />
</xsl:template>
</xsl:stylesheet>
Vorweg, ich will wissen, warum für den Ausdruck orginal nicht der Wert aus dem Entity eingefügt wird,
zipdrive,
Wo soll das geschehen? Du hast diese Entity nirgens referenziert. (Entity-Referenz [XML10])
Ich habe mir diesen Code geschrieben:
<!DOCTYPE maschine SYSTEM "dtd/welcome.dtd">
<welcome titel="Eisenbahnclub Leinefelde e.V.">
Das ist kein gültiges XML. (siehe Gültigkeitsbeschränkung unter Dokumenttyp-Definition [XML10])
Live long and prosper,
Gunnar
Hallo,
Hallo ich habe ein Problem mit XSLT.
Vorweg, ich will wissen, warum für den Ausdruck orginal nicht der Wert aus dem Entity eingefügt wird, warum er, wenn ich META-Angaben mache sagt, dass sie ENTITIES sein müssen und warum <xsl:element name="title"><xsl:value-of select="@titel" /></xsl:element> nicht angewendet wird?!
Wer sagt die all diese Dinge? (XML-Parser, XSLT-Prozessor bitte angeben!)
Ich hoffe mal ihr könnt mir da weiterhelfen!!!
Ich habe mir diesen Code geschrieben:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE maschine SYSTEM "dtd/welcome.dtd">
<?xml-stylesheet type="text/xsl" href="xsl/welcome.xsl"?><welcome titel="Eisenbahnclub Leinefelde e.V.">
Hier ist dein erster Fehler: du gibst mit "<!DOCTYPE maschine" nicht nur den Name der DTD bekannt, aber auch den Namen des Wurzelelements. Demnach müsste dein Wurzelelement "maschine" heissen und nicht "welcome".
<!NOTATION png PUBLIC '-//TEI//NOTATION IETF RFC2083 Portable Network Graphics//EN'>
<!ENTITY orginal SYSTEM "./graphics/logo-orginal.png" NDATA png>
<!ATTLIST logo
quelle ENTITY #REQUIRED
alternative CDATA #REQUIRED<logo quelle="orginal" alternative="Eisenbahnclub Leinefelde e.V." />
Man kann natürlich binäre Daten mit Hilfe von DTD-Notations in XML-Dateien referenzieren, aber diese Möglichkeit stellt (bisher leider) nur einen generellen anstz dar. D.h. XML-Anwendungen können, müssen aber nicht die binäre Datei einbinden.
Du kannst es also direkt so machen:
<logo quelle="./graphics/logo-orginal.png" ...>.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output media-type="text/html" method="html" />
<xsl:template match="/">
<html>
<head>
<xsl:element name="title"><xsl:value-of select="@titel" /></xsl:element>
Hier wird @titel nicht eingefügt, weil du ein match auch "/" d.h. auf den Wurzelknoten machst und das ist in XSLT nicht mit dem Wurzelelement identisch.
(http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm#knotentypen_achsen_pfade)
Du kannst/musst hier also <xsl:template match="/welcome"> bzw. <xsl:template match="/maschine"> verwenden.
Grüße
Thomas