为了设置通知的格式,内容格式化程序将对每个通知类使用一个或多个 XSLT 文件。您可以定义 XSLT 文件,以便将每个通知的中间 XML 数据转换为格式化消息。
中间 XML 数据
对于每个通知,分发服务器会将原始通知转换为 XML 文档。对于所有非摘要通知,XML 文档的格式如下所示:
<notifications>
<notification>
<FieldName>value</FieldName>
<FieldName>value</FieldName>
...
</notification>
</notifications>
notification 元素中元素的名称反映了应用程序定义中指定的通知字段的名称,元素的值为通知字段的值。通知数据由通知表通知字段和计算通知字段组成。
例如,分发服务器可能为股票通知生成以下 XML 文档:
<notifications>
<notification>
<StockSymbol>AWKS</StockSymbol>
<StockPrice>55.02</StockPrice>
</notification>
</notifications>
对于摘要通知,还会在架构中添加其他 notification 元素:
<notifications>
<notification>
<FieldName>value</FieldName>
...
</notification>
<notification>
<FieldName>value</FieldName>
...
</notification>
</notifications>
中间 XML 中的所有值都是字符串,并且 XML 中通知字段的顺序是不确定的。
中间 XML 中表示日期或数字的任何字段值都采用与通知的区域设置相对应的格式。例如,“英语(美国)”区域设置采用的日期格式为 MM/DD/YYYY,而“日语(日本)”区域设置的日期格式为 YYYY/MM/DD。对通知内容进行其他翻译或转换是应用程序开发人员的职责。
XSL 转换
Notification Services 不验证 XSLT 文件,也不对转换强加任何限制。转换必须生成有效的 XML 文本或纯文本。但是,有了这两个选项,几乎可以生成所有类型的文档。
如果要为上述通知数据生成 HTML 文档,则可创建以下 XSL 转换:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="notifications">
<html>
<body>
<xsl:apply-templates/>
<i>Thank you for using SQL Server
Notification Services.</i>
</body>
</html>
</xsl:template>
<xsl:template match="notification">
<b><xsl:value-of select="StockSymbol" /></b>
is now trading at: <b>
$<xsl:value-of select="StockPrice" /></b><br/>
<br/><br/>
</xsl:template>
</xsl:stylesheet>
生成纯文本
默认情况下,XSLT 内容格式化程序生成有效的 XML。因此,它将写入以下字符作为其实体引用:> (>)、< (<)、' (')、" (") 和 & (&)。
如果 XSLT 文件中包含 xsl:output 元素,则可配置格式化程序以生成文本输出。以下示例是一个 XSL 转换,该转换将原样返回发送给它的内容,不执行任何转换。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*">
Today's Notifications:
<xsl:copy-of select = "." />
</xsl:template>
</xsl:stylesheet>
XSLT 提示
以下提示可能对开发 XSLT 文件有所帮助。
以下代码显示如何创建只返回中间 XML 文档的 XSLT 文件,该文档是分发服务器根据原始通知数据生成的。使用此项转换,内容格式化程序实际并未执行任何转换,只是简单地传递原始通知数据。使用此传递转换可以帮助验证 XML 文档,并可使用喜爱的开发工具来创建 XSLT 文件:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="*"> <xsl:copy-of select = "." /> </xsl:template> </xsl:stylesheet>
使用 xsl:output 元素的 indent 属性,可以自动缩进 XML:
<xsl:output method="xml" indent="yes"/>
如果事件数据包含实体引用或 XML 碎片,请将内容格式化程序的 DisableEscaping 属性设置为 true,使内容格式化程序不会过度转换数据(如将 & 转换为 &amp;)。有关 DisableEscaping 属性的详细信息,请参阅定义 XSLT 内容格式化程序。
如果事件数据包含保留字符(如 &),请将内容格式化程序的 DisableEscaping 属性设置为 false,使内容格式化程序在最终转换前将保留字符转换为有效的 XML。有关详细信息,请参阅 XML Reserved Characters。
请参阅
概念
XSLT 文件位置
定义 XSLT 内容格式化程序
配置内容格式化程序
其他资源
定义通知类
定义 Notification Services 应用程序