XMLTransformation 节点

本主题包含以下部分:

目的

根据 XSL(可扩展样式表语言)样式表提供的规则,使用 XMLTransformation 节点将 XML 消息转换为另一格式的 XML 消息。

您可以使用以下三种方式中的一种,指定要应用于此转换的样式表的位置:

  1. 您可以使用节点属性。这种方式确保此单一样式表定义的转换将应用于此节点处理的每条消息。
  2. 您可以使用消息本身内的 XML 数据内容。这种方式将按照消息本身定义的样式表对消息进行转换。此行为仅适用于位于消息流项目内的 XSL 和 XML 文件。
  3. 您可以在与消息相关的 LocalEnvironment 文件夹内设置值。这种方式将提供样式表的动态选项,这是因为收到消息后您必须在消息流内设置此值(在 Compute 节点中)。因此,您可以使用各种输入(如该消息数据的内容或数据库中的值)来确定要为此消息使用哪个样式表。

如果在消息中没有嵌入样式表,并且节点高速缓存级别(样式表高速缓存级别节点属性)大于 0,则将 XSLT(用于转换的可扩展样式表语言)用于转换。

XMLTransformation 节点在工作台中由以下图标表示:

XMLTransformation 节点图标

在消息流中使用此节点

有关如何使用此节点的示例,请设想两个定期交换信息的新闻组织。一个可能是电视台,而另一个是报社。尽管信息相似,但双方使用的词汇却有所不同。此节点可以通过应用指定样式表的规则,将一种格式转换为另一种格式。如果在消息中指定样式表(XML 数据或 LocalEnvironment),则同一个节点可以执行这两种转换。

请参阅 XMLT 样本获取有关如何使用 XMLTransformation 节点的更多详细信息。

配置 XMLTransformation 节点

将 XMLTransformation 节点的实例放入消息流中后,可以对其进行配置。右键单击编辑器视图中的节点,然后单击属性。将显示该节点的基本属性。

必须为其输入值的所有必要属性(不含已定义缺省值)在属性对话框上都用星号进行标记。

如下所示,配置 XMLTransformation 节点:

  1. 嵌入式 XML 选择优先级消息环境选择优先级代理节点属性选择优先级属性选择值。您设置的这些值确定为获取样式表信息搜索可选择位置的顺序。最高优先级设置为 1。缺省顺序为:
    1. 嵌入式 XML 选择优先级,因此具有缺省值 1。节点为获取样式表位置信息搜索 XML 数据。例如,XML 数据可能包含以下内容:
      <?xml-stylesheet type="text/xsl" href="foo.xsl"?>
    2. 消息环境选择优先级,因此具有缺省值 2。该节点搜索与当前消息关联的 LocalEnvironment,获取在 ComIbmXslXmltStylesheetname 元素中存储的样式表信息。

      因为在 SupportPac for V2.1 中提供此节点,且对样式表名称使用了 ComIbmXslMqsiStylesheetname 元素,所以当前节点将同时检查这两个元素。如果这两个元素都存在,则优先采用 ComIbmXslXmltStylesheetname 中的值。

    3. 代理节点属性选择优先级,因此具有缺省值 3。该节点使用节点属性样式表名称样式表目录来确定正确的值。

    尽管不建议,您仍可以将多个属性设置为同一个值。如果您进行了设置,则节点设置的优先级顺序是上面表明的缺省顺序。

    如果设置值为 ignore,则节点不搜索相应位置来获取样式表标识。如果将所有三个属性都设置为 ignore,则生成运行时错误。

  2. 如果要使用节点属性指定非部署样式表,请为样式表名称输入必需的值。如果进行搜索并在首选位置(由您设置的选择优先级值确定)中找到样式表信息,则忽略此值。

    如果要指定主体样式表,有两种方式可以执行此操作:
    1. 使用工作空间中样式表名称属性字段旁边的浏览按钮。当把消息流添加到 .bar 文件时,所标识的主体样式表及其所有相关引用的子样式表都自动添加到该 BAR 文件(只要它们以及它们的父样式表都可用)。
    2. 对于已部署或要部署样式表的标识,只能使用样式表名称属性,而样式表目录属性必须留空。
  3. 如果样式表标识是标准的,则忽略样式表目录;如果它不是标准的,则您在此属性中设置的值将被添加到规范的开头,无论它是在何处找到的。
  4. 样式表高速缓存级别中,指定存储在节点的这一实例中经过编译或解析的样式表个数。缺省值为 5。样式表高速缓存在节点的整个生命周期都被保留。从流删除节点时、删除流时或停止执行组时会清除它。如果修改样式表,则修订(最新)版本优先于高速缓存的版本使用。如果要刷新高速缓存,请使用 mqsireload 命令。
  5. 在属性对话框导航器中选择“输出字符集”来指定节点搜索有效位置以查找要用于输出消息的字符集的顺序。最高优先级设置为 1。缺省顺序为:
    1. 消息环境选择优先级,因此具有缺省值 1。该节点搜索与当前消息关联的 LocalEnvironment,获取在 ComIbmXslXmltOutputcharset 元素中存储的字符集信息。

      例如,要按 UTF-8 编码转换的输出,输入值 1208 作为此元素中的字符串。

      因为在 SupportPac for V2.1 中提供此节点,且对输出字符集使用了 ComIbmXslMqsiOutputcharset 元素,所以当前节点将同时检查这两个元素。如果这两个元素都存在,则优先采用 ComIbmXslXmltOutputcharset 中的值。

    2. 代理节点属性选择优先级,因此具有缺省值 2。该节点使用属性输出字符集来确定正确的值。

      如果为输出字符集设置值,您输入的值必须是数字。例如,要按 UTF-16 编码转换的输出,输入 1200

    尽管不建议,您仍可以将多个属性设置为同一个值。如果您进行了设置,则节点设置的优先级顺序是上面表明的缺省顺序。

    如果您设置值 0,则节点不搜索相应位置来获取字符集标识。

    如果因为没有设置任何值,或因为选择优先级被设置为 0,节点从这两个源都无法确定输出字符集,则使用缺省值 1208(UTF8)。(XSL 规范指示可以在样式表中指定输出字符集;但 XMLTransformation 节点忽略此值。)

  6. 在属性对话框导航器中选择“详细信息跟踪”来跟踪 XMLTransformation 节点的操作。详细信息跟踪属性的缺省值为 Off。要激活跟踪,将该属性设置为 On

    跟踪信息将写至跟踪文件 XMLTTrace.log

    • 在 z/OS 系统上,该文件位于 <broker_dir>/output 中,其中 <broker_dir> 是安装代理的目录。
    • 在 Windows 系统上,该文件位于 <broker work path>\common\log 中。
    • 在 UNIX 系统上,该文件位于 <broker work path>\common\log 中。

    如果将 XMLTransformation 节点的详细信息跟踪设置为 on,则它对执行组中的所有节点都为 on。

    注: 当前不推荐使用此属性。如果启用了用户调试跟踪,则任何相关跟踪现已转至用户跟踪中。XMLTransformation 节点中的详细信息跟踪设置不影响任何用户跟踪。
  7. 选择属性对话框导航器中的“描述”,输入简短描述和/或详细描述。
  8. 单击应用在不关闭属性对话框的情况下对 XMLTransformation 节点进行更改。单击确定应用更改,并关闭属性对话框。

    单击取消关闭对话框,并废弃对属性所作的所有更改。

如果您正在处理大型 XML 消息并收到“内存不足”错误,可以使用 mqsireportproperties 命令查看 XSLT 引擎 Java 堆大小的当前值,并使用 mqsichangeproperties 命令来增加该值:
mqsireportproperties brokerName -e executionGroupLabel -o ComIbmJVMManager -n jvmMaxHeapSize
mqsichangeproperties brokerName -e executionGroupLabel -o ComIbmJVMManager -n jvmMaxHeapSize -v newSize
以适当的值替换 brokerNameexecutionGroupLabelnewSize

应该为 newSize 选择的值视您的计算机具有的物理内存数量和您正在使用 Java 的量而定。建议使用 512 MB 到 1 GB 范围内的值。

终端和属性

下表中描述了 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 跟踪是打开还是关闭。如果跟踪为打开,则在文件中记录低级别跟踪。

下表中描述了 XMLTransformation 节点的描述属性。

属性 M C 缺省值 描述
简短描述   节点的简短描述。
详细描述   描述消息流中节点用途的文本。

更新开始如果输入消息体的序言包含 XML 编码声明,XMLTransformation 节点将忽略该编码,并始终使用消息属性文件夹中的 CodedCharSetId 来解码消息。更新结束

已部署样式表或 XML 文件的部署

为了使用已部署样式表或 XML 文件,必须执行以下操作:
  1. 确保文件具有正确的文件扩展名:要部署的样式表必须使用 .xsl 或 .xslt 作为它们的文件扩展名,而要部署的 XML 文件必须使用 .xml 作为它们的文件扩展名。
  2. 将文件导入到 Eclipse 工作空间中:要部署的所有样式表和 XML 文件都必须导入到 Eclipse 工作空间项目中。要部署的位置依赖子样式表或 XML 文件必须置于相对于它们父样式表的正确目录结构中。不应将不想部署的位置依赖后代放入 Eclipse 工作空间。
  3. 确保对文件的所有引用都是相对的:一般而言,对可以出现在流的本地环境、输入 XML 文档、XMLTransformation 节点样式表名称属性或父样式表中的主体样式表的所有引用都必须是相对的。对主体样式表的引用应该相对于相关 Eclipse 工作空间项目的根目录。例如,必须将对 Eclipse 工作空间中主体样式表 C:\\project1\a\b.xsl 的引用指定为 a/b.xsl(或 ./a/b.xsl)。唯一的例外是,当指定某个主体样式表作为 XMLTransformation 节点上的样式表名称属性时,也可以使用指向 Eclipse 工作空间中正确目录结构的绝对路径。如果找到该主体样式表,系统会自动将节点属性重新设置为正确的相对值(并对该主体样式表和在相对 Eclipse 工作空间项目中提供的其所有位置依赖子样式表执行自动部署)。对主体样式表的位置依赖子样式表(或 XML 文件)的所有应用都必须相对于其父样式表的位置。例如,如果样式表 //project1/a/b.xsl 引用样式表 //project1/a/c/d.xsl,则引用必须更改为 c/d.xsl(或 ./c/d.xsl)。
  4. 处理非部署子样式表或 XML 文件:如果您有一个不要部署的相对引用的子样式表(或 XML 文件),但要部署它的父样式表,请确保将它放置在 /XSL/external(/XML/external)下的正确位置。代理会自动将执行组部署的存储树 /XSL/external 和 /XML/external 树关联到一起。举例来说,这表示如果在代理的已部署存储中没有找到文档(b/c.xml),则代理将自动在 /XML/external/a/b 目录中搜索对已部署主体样式表 a/style.xsl 中 b/c.xml 的引用。对已知已经部署但在工作空间中不可用的文件也必须使用相对路径引用。
  5. 部署文件:只需对系统没有拾取的样式表或 XML 文件进行手动部署(工具提供关于这些文件的警告)。要手动部署,请将要部署的文件添加到代理归档中(请参阅将文件添加至代理归档为 XSL 样式表添加关键字)并部署代理归档。您只需对属于同一个执行组的所有消息流部署一次样式表或 XML 文件,并且对每个执行组至少部署一次。对于包含引用样式表或 XML 文件的流的 .bar 文件,不必在该文件中部署样式表或 XML 文件。同样,任何流都无需引用 .bar 文件中的样式表和 XML 文件。然而,当流被保存到 .bar 文件时,如果在该 .bar 文件中没有找到任何子样式表或 XML 文件,则会给出警告。您有责任确保代理上提供了这些子样式表或 XML 文件。代理是不为 Eclipse 项目所知的。因此,属于一个项目的已部署样式表可能被另一个覆盖(如果它们共享同一个目录路径和文件名),即使它们属于不同的项目。部署将覆盖正在部署文件的所有老版本,而不发出任何警告。这也适用于自动部署的样式表。
声明 | 商标 | 下载 | | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后更新:2006/05/19
ac12490_