zipdrive: XML/XSLT - META-Problem, ENTITY-Problem, allg.

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>

  1. 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

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
  2. 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