2010-05-18 8 views
10

Ich bin völlig neu in der Verwendung von XSL, also, wenn es irgendwelche Informationen gibt, die ich vernachlässige, lass es mich wissen.XSLT-String mit HTML-Entities - Wie kann ich es als HTML rendern?

Ich habe eine Zeichenfolge in meiner XSLT-Datei, die ich so anzeigen kann:

<xsl:value-of select="@Description/> 

und es zeigt sich, in einem Browser dargestellt wie:

<div>I can't do anything about the html entities existing in the text.</div> <div>This includes quotes, like &quot;Hello World&quot; and sometimes whitespaces.&nbsp;</div> 

Was kann ich tun, um Diese Zeichenfolge gerendert als HTML, so dass <div></div> Ergebnisse in Zeilenumbrüche, &quot; gibt mir ", und &nbsp; gibt mir einen Platz?

Ich könnte näher auf Dinge, die ich bereits versucht habe, die nicht funktioniert haben, aber ich weiß nicht, ob das relevant ist.

+0

Gute Frage (+1). Sehen Sie meine Antwort und erklären Sie, warum dies nicht so wichtig ist, wie dies im Sinne von XSLT in XSLT 2.0 durchgeführt wird und warum die Verwendung von DOE (Disable Output Escaping) nicht empfohlen wird. –

Antwort

15

Ich glaube, Sie wollen als so das folgende Attribut setzen:

<xsl:value-of select="@Description" disable-output-escaping="yes"/> 
+0

Aha, danke! Ich habe Dinge getan, wie zum Beispiel eine 'string-replace' Vorlage zu finden und sie für jede HTML Entität einmal und wieder aufzurufen. – Kache

+0

Dieses 'disable-output-escaping' funktioniert einfach nicht für mich. Siehe [meine Frage] (http://stackoverflow.com/q/25508777/356815) – basZero

3

Warum brauchen Sie Entitäten Ausgang haben? Zum Browser &nbsp; ist das gleiche wie &#xA0; - in beiden Fällen wird ein schussfreies Leerzeichen angezeigt.

Es gibt eine Funktion in XSLT 2.0 namens character-maps, die diese Funktionalität bietet, wenn sie wirklich benötigt wird. Es ist eine bewährte XSLT-Methode, wenn Sie nicht versuchen, DOE zu verwenden, es sei denn, dies ist absolut notwendig.

Außerdem ist DOE kein obligatorisches Merkmal von XSLT, und einige XSLT-Prozessoren implementieren es möglicherweise nicht. Dies bedeutet, dass eine XSLT-Anwendung, die DOE verwendet, im Allgemeinen nicht über verschiedene XSLT-Prozessoren hinweg portierbar ist.

+0

Werden Zeichenkarten im gesamten Dokument angewendet? Das Beispiel von der Seite zeigte, dass es nicht um irgendeine Art von Element gewickelt war. Auch in meinem Fall kommt die Zeichenfolge, die ich bekomme, mit den HTML-Entitäten (ich habe keine Kontrolle darüber). Char-Maps können noch verwendet werden? – Kache

+0

@ Kache4: Die Entität befindet sich nur im XML-Dokument (xhtml). Der Parser ersetzt ihn immer mit ' ' und das sieht der XSLT-Prozessor.Zeichenkarten wissen nichts über das XML-Dokument - sie werden verwendet, wenn die endgültige Ausgabe fertig (serialisiert) ist. Sie können einfach jedes Vorkommen von " " durch " " ersetzen (mit allem, was für diese Zeichentabelle angegeben ist). Zeichenkarten werden verwendet, um die gesamte Ausgabe zu serialisieren. –

0

Der Grund, divs in HTML eine Endzeile zu erhalten, ist komplett anders und bezieht sich auf das CSS-Boxmodell. Die meisten Browser wenden den Stil an:

div {display:block;} 

Anstelle der Standardanzeige: Inline ;. Sie tun dies jedoch nur für Divs im XHTML-Namespace. Sie müssen divs in den XHTML-Namespace ausgeben, um dies zu erleichtern. Binden Sie den XHTML-Namensraum mit dem Präfix xhtml an der Spitze des Dokuments wie folgt:

<xsl:stylesheet xmnls:xhtml="http://www.w3.org/1999/xhtml" ... > 

Und dann gibt die divs als <xhtml:div> ... </xhtml:div> meisten Browser erkennt, die div in dem XHTML-Namensraum zu sein (http://www.w3.org/1999/xhtml) und wenden Sie den Block Stil.