XSLT в компоненте получает (un) кодированный
Действительно простой вопрос, но я не могу заставить его работать правильно.
У меня есть компонент, в котором есть некоторый XSLT (для навигации). Он публикуется с использованием XSLT-посредника через XSLT TBB.
После публикации & lt; меняется на <, и разбивает xslt...
Содержимое компонента (обычное текстовое поле)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" exclude-result-prefixes="tcm xsl xs xlink tridion">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates select="/node/node[@type='folder')='0' and position() < 3]">
<xsl:sort select="sortnum"/>
</xsl:apply-templates>
<xsl:template match="node">
<xsl:text>Lorem Ipsum</xsl:text>
</xsl:template>
</xsl:stylesheet>
XLT CT TBB, выводящий этот компонент:
<xsl:stylesheet version="1.0" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tridion="http://www.tridion.com/ContentDelivery/5.3/TCDL" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:helper="http://www.tridion.com/xslthelper" xmlns:systeemcode="http://www.indivirtual.nl/SysteemCode" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="tcm xsl tridion xlink systeemcode xslthelper helper xhtml">
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" encoding="utf-8" standalone="no"/>
<xsl:variable name="content" select="/tcm:Component/tcm:Data/tcm:Content/systeemcode:SysteemCode"/>
<xsl:template match="/">
<xsl:value-of disable-output-escaping="yes" select="helper:HtmlDecode($content/systeemcode:code)"/>
</xsl:template>
</xsl:stylesheet>
Страница TBB XSLT, выводящая CP:
<xsl:stylesheet version="1.0" xmlns:helper="http://www.tridion.com/xslthelper" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="tcm:ComponentPresentation">
<xsl:value-of select="helper:GetRenderedComponent(./tcm:Component/@xlink:href, ./tcm:ComponentTemplate/@xlink:href)" disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Ответы
Ответ 1
Проблема была обнаружена в CT TBB (благодаря @ChrisSummers).
XSLT CT TBB, выводящий этот компонент, ссылался на XSLT-посредник HTMLEncoding helper: метод HtmlDecode(), который подходит для обычного текста, но не для XSLT. Я удалил его и решила проблему:
<xsl:stylesheet version="1.0" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tridion="http://www.tridion.com/ContentDelivery/5.3/TCDL" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:helper="http://www.tridion.com/xslthelper" xmlns:systeemcode="http://www.indivirtual.nl/SysteemCode" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="tcm xsl tridion xlink systeemcode xslthelper helper xhtml">
<xsl:output method="text" omit-xml-declaration="yes" indent="yes" encoding="utf-8" standalone="no"/>
<xsl:variable name="content" select="/tcm:Component/tcm:Data/tcm:Content/systeemcode:SysteemCode"/>
<xsl:template match="/">
<xsl:value-of disable-output-escaping="yes" select="$content/systeemcode:code"/>
</xsl:template>
</xsl:stylesheet>
Ответ 2
Как вы выводите XSLT, с шаблоном, который я предполагаю? Можете ли вы разместить свой шаблон?
Вероятно, вам нужно использовать атрибут "disable-output-escaping =" yes ", если вы используете шаблон XSLT, см. http://www.w3schools.com/xsl/el_value-of.asp
Ответ 3
Я столкнулся с аналогичной проблемой ранее, для решения этой проблемы мне пришлось использовать еще один С# TBB, который снова удалил текущее значение до исходного значения.