我尝试做的是将百分号(%)直接输出到< td>标签。以下是我的代码:
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="item_container" %%=v(@Item_Container_Style)=%%>
...
当我测试XSL时,我收到以下错误:
SAXParseException: Expected an attribute name (Set_A_Custom.xsl, line 205, column 38)
所以基本上它看到&#34; %% = v(@Item_Container_Style)= %%&#34;作为无效的HTML,但我需要这些代码。
如果您想知道我为什么这样做,那是因为我正在编写XSL来输出包含AMPscript的HTML(一种ExactTarget专有的脚本语言)。虽然不需要知道有关AMPscript的任何信息,但我只需要在HTML中输出百分号(%),一切都会正常工作。
有什么想法吗?为了记录,我使用的是XSL 1.0。谢谢大家!
答案 0 :(得分:2)
XSLT样式表本身必须是格式良好的XML,因此您无法直接在样式表中包含此类构造。如果您使用的XSLT处理器支持disable-output-escaping
,那么您可以执行类似
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<xsl:text disable-output-escaping="yes"><![CDATA[<td class="item_container" %%=v(@Item_Container_Style)=%%>]]></xsl:text>
...
<xsl:text disable-output-escaping="yes"><![CDATA[</td>]]></xsl:text>
</tr>
</table>
如果它不允许disable-output-escaping
,那么您唯一的选择是使用text
输出方法,并将所有标记输出为具有角度的文本括号转义(或CDATA)。
答案 1 :(得分:2)
我要做的是将百分号(%)直接输出到
<td>
代码中。
“html”或“xml”输出模式无法实现。 XSLT旨在创建语法上理智的 HTML,你不能让它做任何其他事情。
当然你可以切换到“文本”输出模式并做任何你喜欢的事情,但是用这种方式生成HTML要困难得多。
或者你可以使用disable-output-escaping
,如果你的XSLT处理器支持它,但如果你需要在许多地方这样做,这将很快将你的XSLT样式表简化为乱七八糟。
话虽如此,这是一个提案。在XSLT中,您使用“html”输出模式,并且:
<td
class="item_container"
amp-1="%%=v({@Item_Container_Style})%%"
amp-2="%%=v({@Some_Other_Element})%%"
>
some text %%=v(<xsl:value-of select="Other_Stuff" />)%% more text
</td>
这是语法上有效的XSLT,它涵盖了两种情况(属性中的多个占位符,文本中的多个占位符)并创建语法上有效的HTML:
<td
class="item_container"
amp-1="%%=v(item container style content)%%"
amp-2="%%=v(some other element content)%%"
>
Here some text %%=v(other stuff)%%
</td>
然后使用后处理步骤将该HTML转换为AMPscript:
正则表达式将\bamp-\d+="(%%[\s\S]*?%%)"
替换为$1
,这将导致
<td
class="item_container"
%%=v(item container style content)%%
%%=v(some other element content)%%
>
Here some text %%=v(other stuff)%%
</td>
通常强烈反对使用正则表达式处理HTML,但这可能只是一个足够狭窄的用例。
答案 2 :(得分:2)
AMPScript似乎有一种基于标准的语法作为其专有语法的替代方法:
分隔符比较
下表显示了标准AMPscript分隔符与服务器端分隔符之间的相似之处。
Standard AMPscript Delimiter Tag-based AMPscript Delimiter
%%[ <script runat=server language=ampscript>
etc
这对你有帮助吗?