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
这对你有帮助吗?
我想做的是将百分号 (%) 直接输出到 < 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
这对你有帮助吗?