HTML in XSLT-Output aus XML?

Status
Nicht offen für weitere Antworten.

Sunray

Erfahrenes Mitglied
Hi,

bin gerade etwas am herumexperimentieren.
Das Ziel: eine "Homepage" (Spielerei) aus XML-Dateien, die über eine XSLT angezeigt wird.
Das Problem dabei ist, dass ich in den XML-Dateien nur Text speichern kann und kein HTML, da meine XSD die Datei zurückweist oder, wenn ich xs:anyType statt xs:string benutze, die HTML-Tags nicht verarbeitet werden.
Wie erreiche ich, dass ich meine XML-Dateien ungefähr so formulieren kann:
Code:
<Page>
 <Title>Hauptseite</Title>
 <Content>
  <h1>Hallo Welt</h1>
  Das hier ist TestTextTestTextTestTextTestTextTestTextTestTextTestText<br />
  <a href="http://www.link.com">Ein Link</a>
 </Content>
</Page>
und der <Content> dann auch richtig verarbeitet wird?
 
Hallo Sunray,
ich bin zwar kein XML-Gott, frage mich aber warum du in der XML-Datei Inhalt und Formatierung mischst. Was macht dann eigentlich noch dein XSLT-Stylesheet? Oder warum schreibst du nicht gleich HTML statt XML?
Ist zwar etwas albern, trotzdem habe ich einen Lösungsvorschlag für dein Stylesheet, z. B.
[...]
<xsl:template match="h1">
<h1><xsl:value-of select="."/></h1>
</xsl:template>
und
<xsl:template match="a">
<a href="{@href}"><xsl:value-of select="."></a>
</xsl:template>
Entscheide aber selbst, ob das soooo sinnvoll ist (ich hab jetzt übrigens nicht ausprobiert, ob {@href} klappt, aber so ähnlich könnte es funktionieren).

Gruß

madlds
 
ich bin zwar kein XML-Gott, frage mich aber warum du in der XML-Datei Inhalt und Formatierung mischst.
Das hat was.
Diese Website soll Rich-Text in Form von HTML beinhalten. Diese XML-Dateien Stellen einerseits den Inhalt bereit, andererseits auch Informationen über den.
Das Stylesheet liefert das Design und die Navigation, welche auch durch diese XML-Dateien beinflusst werden kann, dazu.

Das hat den Vorteil, dass der Benutzer das Design (die XSLT-Datei) nur einmal herunterladen muss, da sie zwischengespeichert wird.

Dein Vorschlag hat zwar geklappt, ist aber nicht wirklich befriedigend.
Anstatt href="{@href}" habe ich nicht versucht. Stattdessen:
Code:
<a>
<xsl:attribute name="href"><xsl:value-of select="@href" /></xsl:attribute>
</a>

Ich benötige, wie gesagt, nur RichText und Links. Das reicht.
 
Hallo nochmal,
falls du für alle eigenen Tags templates geschrieben hast, kannst du auch ein Standardtemplate definieren, das für den Rest (die HTML-Tags) gilt:
Code:
<xsl:template match="*">
 <xsl:element name="{name()}">
  <xsl:for-each select="@*">
   <xsl:attribute name="{name()}">
    <xsl:value-of select="."/>
   </xsl:attribute>
  </xsl:for-each>
  <xsl:value-of select="."/>
 </xsl:element>
</xsl:template>
So kommen die Tags auch in das Ausgabedokument.
Übrigens: Wenn du deinen Text ungeprüft in Content etc. schreibst oder sogar automatisch umwandelst, kann es passieren das bei Eingabe eines falschen Zeichens (z. B. "<") das XML-Dokument knallt.
Vielleicht alles sicherheitshalber in "<![CDATA[...]]>" schreiben?
Gruß
madlds
 
Vielen Dank für diesen Tipp!
Über das Problem mit der Überprüfung habe ich auch schon nachgedacht.
Ich würde das am liebsten über ein Schema machen allerdings weiss ich nicht, wie ich die HTML-Tags darin definieren soll.
Eine Definition von (X)HTML habe ich bei w3c.org nur als DTD gefunden. (Wieso gibt es keine Schemaversion, wenn das doch vom W3C favorisiert wird?)
 
Status
Nicht offen für weitere Antworten.
Zurück