本主题包含以下部分:
按照 XSL(可扩展样式表语言)样式表提供的规则,可使用 XMLTransformation 节点将 XML 消息转换为另一种格式的 XML 消息。
您可以用以下三种方式中的一种,指定要应用于该转换的样式表的位置:
如果在消息中没有嵌入样式表,并且节点高速缓存级别(节点属性 样式表高速缓存级别)大于 0,则将 XSLT(用于转换的可扩展样式表语言)编译器用于转换。如果 XSLT 经过高速缓存,则会在性能方面有所提高,这是因为不是在每次使用 XSLT 时都会对它进行解析。
XMLTransformation 节点在工作台中由以下图标表示:
有关如何使用此节点的示例,请设想两个定期交换信息的新闻组织。一个是电视台,而另一个是报社。尽管信息相似,但双方使用的词汇却有所不同。此节点可以通过应用指定样式表的规则,将一种格式转换为另一种格式。如果在消息中指定样式表(XML 数据或 LocalEnvironment),则同一个节点可以执行这两种转换。
请参阅 XMLT 样本获取有关如何使用 XMLTransformation 节点的更多详细信息。
唯一的例外是,当指定某个主体样式表作为 XMLTransformation 节点上的样式表名称属性时,也可以使用指向 Eclipse 工作空间中正确目录结构的绝对路径。如果找到该主体样式表,系统会自动将节点属性重置为正确的相对值。系统也会自动部署主体样式表,连同相关 Eclipse 工作空间项目中可用的其所有与位置相关的子样式表。对主体样式表与位置相关的子样式表(或 XML 文件)的所有引用都必须相对于其父样式表的位置。例如,如果样式表 //project1/a/b.xsl 引用样式表 //project1/a/c/d.xsl,则必须将该引用更改为 c/d.xsl(或 ./c/d.xsl)。
要进行手动部署,请将要部署的文件添加到代理归档(请参阅将文件添加至代理归档和为 XSL 样式表添加关键字),然后部署代理归档。
如果 代理工作路径/XSL/external 目录中的样式表和已部署的样式表共享同一个路径和名称,则使用已部署的样式表。
将 XMLTransformation 节点的实例放入消息流中后,可以对其进行配置。右键单击编辑器视图中的节点,然后单击属性。将显示该节点的基本属性。
对于必须为其输入值的所有必需属性(没有定义缺省值的属性),在属性对话框上都会用星号作标记。
按如下所示配置 XMLTransformation 节点:
<?xml-stylesheet type="text/xsl" href="foo.xsl"?>
因为此节点在 SupportPac for V2.1 中可用,并且对样式表名称使用了 ComIbmXslMqsiStylesheetname 元素,所以当前节点将同时检查这两个元素。如果这两个元素都存在,则优先采用 ComIbmXslXmltStylesheetname 中的值。
尽管建议不要将多个属性设置为同一个值,但您仍然可以这样设置。如果您这样设置,则节点设置的优先级顺序是上面说明的缺省顺序。
如果设置值 ignore,则节点不会在相应的位置搜索样式表标识。如果将所有三个属性都设置为 ignore,则会生成运行时错误。
如果要使用节点属性指定非部署的样式表,请为样式表名称输入必需的值。如果在首选位置(由您设置的选择优先级值确定)中搜索并找到样式表信息,则会忽略此值。
如果您更改高速缓存的样式表(通过在文件系统中重新部署或替换文件),则在处理新消息之前,持有该高速缓存的 XMLTransformation 节点会用修改过的(最新)版本替换高速缓存的版本。但是,如果您要更改数个样式表,请在作任何更改之前停止相关的消息流。如果您在作更改之前未停止相关的消息流,则无法通过运行消息流保证更改的顺序,并且在更改的样式表之间会产生不兼容。您可以使用 mqsireload命令来重新装入样式表,但是该命令无法阻止不兼容情况的出现。
例如,要按 UTF-8 对转换的输出编码,输入值 1208 作为此元素中的字符串。
因为此节点在 SupportPac for V2.1 中可用,并且对输出字符集使用了 ComIbmXslMqsiOutputcharset 元素,所以当前节点将同时检查这两个元素。如果这两个元素都存在,则优先采用 ComIbmXslXmltOutputcharset 中的值。
如果为输出字符集设置值,您输入的值必须是数字。例如,要按 UTF-16 对转换的输出编码,输入 1200。
尽管建议不要将多个属性设置为同一个值,但您仍然可以这样设置。如果您这样设置,则节点设置的优先级顺序是上面说明的缺省顺序。
如果您设置值 0,则节点不会在相应的位置搜索样式表标识。
如果因为没有设置任何值,或因为将选择优先级设置为 0,故节点无法从任一这两个源确定输出字符集,则使用缺省值 1208(UTF8)。(XSL 规范指示可以在样式表中指定输出字符集;但 XMLTransformation 节点忽略此值。)
跟踪信息将写至跟踪文件 XMLTTrace.log:
如果为某个 XMLTransformation 节点将详细信息跟踪设置为 on,则它对于执行组中的所有节点都为 on。
单击取消以关闭对话框,并废弃对属性所作的所有更改。
mqsireportproperties brokerName -e executionGroupLabel -o ComIbmJVMManager -n jvmMaxHeapSize
mqsichangeproperties brokerName -e executionGroupLabel -o ComIbmJVMManager -n jvmMaxHeapSize -v newSize
以适当的值替换 brokerName、executionGroupLabel 和 newSize。为 newSize 选择的值取决于您的计算机物理内存数量以及正在运行的 Java 程序的多少。
建议使用 512 MB(536870912)到 1 GB(1073741824)范围内的值。
下表中描述了 XMLTransformation 节点终端。
终端 | 描述 |
---|---|
In | 接受供节点处理的消息的输入终端。 |
Failure | 如果在转换期间检测到错误,则该终端是传送原始消息输出终端。 |
Out | 这是传送成功转换的消息的输出终端。 |
下表描述该节点的属性;标题为 M 的列表示属性是否是必需的(如果在未定义缺省值时必须输入值,则在属性对话框上以星号作标记),标题为 C 的列表示属性是否是可配置的(将消息流添加到 BAR 文件以部署此文件时可以更改该值)。
下表中描述了 XMLTransformation 节点样式表属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
XML 嵌入式选择优先级 | 是 | 否 | 1 | 在 XML 数据中搜索样式表位置信息的优先级值。 |
消息环境选择优先级 | 是 | 否 | 2 | 在当前消息的 LocalEnvironment 文件夹中搜索样式表位置信息的优先级值。 |
代理节点属性选择优先级 | 是 | 否 | 3 | 作为节点属性搜索样式表位置信息的优先级值。 |
样式表名 | 否 | 是 | 样式表的名称(在节点属性中搜索样式表规范时使用)。 | |
样式表目录 | 否 | 是 | 样式表的路径。由所有位置方法使用。 | |
样式表高速缓存级别 | 否 | 否 | 5 | 在此节点实例中存储的已编译或已解析的样式表数量。 |
下表中描述了 XMLTransformation 节点输出字符集属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
消息环境选择优先级 | 是 | 否 | 1 | 在当前消息的 LocalEnvironment 文件夹中搜索输出字符集标识的优先级值。 |
代理节点属性选择优先级 | 是 | 否 | 2 | 作为节点属性搜索输出字符集标识的优先级值。 |
输出字符集 | 否 | 否 | 输出字符集的数值 |
下表中描述了 XMLTransformation 节点详细信息跟踪属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
跟踪设置 | 是 | 否 | Off | 跟踪是 on 还是 off。如果跟踪设置为 on,则在文件中记录低级别跟踪。 |
下表中描述了 XMLTransformation 节点的描述属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
简短描述 | 否 | 否 | 节点的简要描述。 | |
详细描述 | 否 | 否 | 描述消息流中节点用途的文本。 |
如果输入消息体的开端包含 XML 编码声明,则 XMLTransformation 节点将忽略该编码,并始终使用消息属性文件夹中的 CodedCharSetId 对消息进行解码。