2010-05-18 10 views
10

Jestem całkowicie nowy w korzystaniu z XSL, więc jeśli są jakieś informacje, których nie uwzględniam, daj mi znać.Łańcuch XSLT z elementami HTML - jak mogę go renderować jako HTML?

Mam ciąg w moim pliku XSLT, że mogę wyświetlić tak:

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

i pokazuje się, renderowane w przeglądarce jak:

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

Co mogę zrobić, aby uzyskać ten ciąg jest renderowany jako HTML, więc <div></div> powoduje, że nowe linie, &quot; daje mi ", a &nbsp; daje mi przestrzeń?

Mogę opracować na temat rzeczy, które już wypróbowałem, które nie zadziałały, ale nie wiem, czy to istotne.

+0

Dobre pytanie (+1). Zobacz moją odpowiedź wyjaśniającą, dlaczego nie jest to tak ważne, jak to się robi w duchu XSLT w XSLT 2.0 i dlaczego nie zaleca się używania DOE (Disable Output Escaping). –

Odpowiedz

15

myślę chcesz ustawić następujący atrybut jak tak:

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

Aha, dzięki! Robiłem takie rzeczy jak znajdowanie szablonu 'string-replace' i wywoływanie go w kółko, raz dla każdej encji html. – Kache

+0

To 'disable-output-escaping' po prostu nie działa dla mnie. Zobacz [moje pytanie] (http://stackoverflow.com/q/25508777/356815) – basZero

3

Dlaczego trzeba mieć wyjście podmioty? Dla przeglądarki &nbsp; jest taka sama jak &#xA0; - w obu przypadkach wyświetli się niepodzielona przestrzeń.

Istnieje funkcja w XSLT 2.0 o nazwie character-maps, która zapewnia tę funkcję, jeśli naprawdę jest potrzebna. Najlepszą praktyką XSLT jest próba nieużywania DOE, chyba że jest to absolutnie konieczne.

Co więcej, DOE nie jest obowiązkową funkcją XSLT i niektóre procesory XSLT mogą jej nie implementować. Oznacza to, że aplikacja XSLT korzystająca z DOE zasadniczo nie jest przenośna dla różnych procesorów XSLT.

+0

Czy mapy znaków są stosowane w całym dokumencie? Przykład ze strony pokazał, że nie był zawinięty wokół jakiegoś elementu. Ponadto w moim przypadku ciąg, który otrzymuję, zawiera elementy HTML (nie mam nad tym kontroli). Czy nadal można korzystać z map Char? – Kache

+0

@ Kache4: Podmiot jest tylko w dokumencie XML (xhtml). Analizator składni zawsze zamienia go na ' ' i to właśnie widzi procesor XSLT.Mapy znaków nie wiedzą nic o dokumencie XML - są używane, gdy ostateczne wyniki są wykonywane (serializowane). Mogą po prostu zastąpić każde wystąpienie ' ' ' ' (z tym, co jest określone dla tej mapy znaków). Mapy znaków są używane do serializowania całego wyniku. –

0

Powód, dla którego divy w HTML otrzymują linię końcową, jest zupełnie inny i związany z modelem skrzynkowym CSS. Większość przeglądarek stosuje ten styl:

div {display:block;} 

Zamiast standardowego wyświetlacza: wbudowany ;. Jednak robią to tylko w div w przestrzeni nazw XHTML. Aby to ułatwić, musisz wypisać divy do przestrzeni nazw XHTML. Wiązania nazw XHTML do xhtml prefix na górze dokumentu tak:

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

A potem wyjście DIV jak <xhtml:div> ... </xhtml:div> większości przeglądarek rozpozna div bycia w przestrzeni nazw XHTML (http://www.w3.org/1999/xhtml) i zastosować blok styl.

Powiązane problemy