HTML 元素中的特殊字符

Special Characters in HTML Element

我想做的是将百分号 (%) 直接输出到 < 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)

所以基本上它将“%%=v(@Item_Container_Style)=%%”视为无效 HTML 但我需要此代码。

如果您想知道我为什么这样做,那是因为我正在编写 XSL 以输出 HTML,其中包含 AMPscript(一种 ExactTarget 专有脚本语言)。尽管您不需要了解任何关于 AMPscript 的知识来帮助我,但我只需要在 HTML 中输出百分号 (%),一切都会起作用。

有什么想法吗?作为记录,我使用的是 XSL 1.0。谢谢大家!

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 中)。

What I'm trying to do is output a percent sign (%) directly into a <td> tag.

无法使用 "html" 或 "xml" 输出模式。 XSLT 旨在创建 语法合理 HTML,您不能让它做任何其他事情。

当然你可以切换到 "text" 输出模式并做任何你想做的事情,但是用这种方式生成 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>

然后使用 post 处理步骤将 HTML 转换为 AMPscript:

正则表达式将 \bamp-\d+="(%%[\s\S]*?%%)" 替换为 </code>,这将导致 </p> <pre><code><td class="item_container" %%=v(item container style content)%% %%=v(some other element content)%% > Here some text %%=v(other stuff)%% </td>

通常强烈不建议使用正则表达式处理 HTML,但这可能只是一个足够窄的用例。

AMPScript 似乎有一个基于标准的语法来替代其专有语法:

分隔符比较

下面的 table 展示了标准 AMPscript 分隔符和服务器端分隔符之间的相似之处。

Standard AMPscript Delimiter    Tag-based AMPscript Delimiter
%%[                             <script runat=server language=ampscript>
etc

这对你有帮助吗?