XMLTransformation 节点

本主题包含以下部分:

用途

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

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

  1. 您可以使用节点属性。这种方式确保由此单一样式表定义的转换将应用于此节点处理的每条消息。
  2. 您可以使用消息自身中的 XML 数据内容。这种方式将按照消息自身定义的样式表对消息进行转换。
  3. 更新开始您可以在 LocalEnvironment 文件夹中设置值。必须在 XMLTransformation 节点前(例如,在 Compute 节点中)设置该值。因此,您可以使用各种输入(如消息数据的内容或数据库中的值)来确定此消息使用哪个样式表。更新结束

更新开始如果在消息中没有嵌入样式表,并且节点高速缓存级别(节点属性 样式表高速缓存级别)大于 0,则将 XSLT(用于转换的可扩展样式表语言)编译器用于转换。如果 XSLT 经过高速缓存,则会在性能方面有所提高,这是因为不是在每次使用 XSLT 时都会对它进行解析。更新结束

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

XMLTransformation 节点图标

在消息流中使用此节点

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

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

更新开始

部署和非部署的样式表

您可以用两种不同方式在 XMLTransformation 节点中使用样式表:
部署的样式表
部署的样式表是导入到代理归档(BAR)文件并部署到目标系统的样式表。部署的样式表由 WebSphere Message Broker 管理。用这种方式部署样式表是 V6.0 的新增功能。主体样式表是消息流中引用的根样式表。例如,必须将对 Eclipse 工作空间中主体样式表 C:\\project1\a\b.xsl 的引用指定为 a/b.xsl(或 ./a/b.xsl)。 主体样式表可以引用(包含或导入)其子样式表。
非部署的样式表
非部署的样式表是存储在某个位置、XMLTransformation 节点可以访问它们的样式表。非部署的样式表不受 WebSphere Message Broker 的管理。
有关更多信息,请参阅样式表和 XML 文件的迁移

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

更新开始配置 XMLTransformation 节点之前,需要了解如何使用样式表。(样式表可以引用另一个 XML 文件和样式表。) 为了使用部署的样式表或 XML 文件,必须执行以下步骤:
  1. 确保文件具有正确的文件扩展名:要部署的样式表必须使用 .xsl 或 .xslt 作为它们的文件扩展名,而要部署的 XML 文件必须使用 .xml 作为它们的文件扩展名。
  2. 将文件导入到 Eclipse 工作空间:必须将要部署的所有样式表和 XML 文件都导入到 Eclipse 工作空间项目中。对于要部署的与位置相关的子样式表或 XML 文件,必须将其放置在与其父样式表相对的正确目录结构中。对于不打算部署的与位置相关的子样式表,不应将其放入 Eclipse 工作空间。
  3. 更新开始确保对这些文件的所有引用都是相对的:一般而言,无论对部署的样式表的所有引用出现在何位置,这些引用的位置都必须是相对的。对主体样式表的引用应该相对于相关 Eclipse 工作空间项目的根目录。

    唯一的例外是,当指定某个主体样式表作为 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 树关联起来。 这意味着,如果在代理的已部署存储中没有找到已部署主体样式表 a/style.xsl 中的文档 b/c.xml,则该代理会自动在 代理工作路径/XML/external/a/b 目录中搜索对 b/c.xml 的引用。对于已经部署但在工作空间中尚不可用的文件也必须使用相对路径引用。
  5. 更新开始部署文件:只需手动部署那些系统没有采用的样式表或 XML 文件(工具提供关于这些文件的警告)。如果您单击节点的浏览,或提供 Eclipse 工作空间中样式表位置的完整路径,则在 BAR 文件中会自动包含该样式表。

    要进行手动部署,请将要部署的文件添加到代理归档(请参阅将文件添加至代理归档为 XSL 样式表添加关键字),然后部署代理归档。

    更新开始对于每个使用 XMLTransformation 节点的执行组,您可以执行以下操作:
    • 在代理的 代理工作路径/XSL/external 目录中包括样式表,不要在 BAR 文件中包括样式表。

      如果 代理工作路径/XSL/external 目录中的样式表和已部署的样式表共享同一个路径和名称,则使用已部署的样式表。

    • 在 BAR 文件中包括样式表并部署 BAR 文件。如果多个 BAR 文件包含相同名称的样式表,则使用已部署的最后一个 BAR 文件中的样式表。
    • 在执行组自己的 BAR 文件中部署样式表。如果 BAR 文件使用 XMLTransformation 节点,但是不包括样式表,则 Message Brokers Toolkit 会发出警告消息。
    更新结束
    更新结束
更新结束
更新结束

配置 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。样式表高速缓存在节点的整个生命周期都会被保留着。从流中删除节点、删除流或停止执行组时会清除样式表高速缓存。

    如果您更改高速缓存的样式表(通过在文件系统中重新部署或替换文件),则在处理新消息之前,持有该高速缓存的 XMLTransformation 节点会用修改过的(最新)版本替换高速缓存的版本。但是,如果您要更改数个样式表,请在作任何更改之前停止相关的消息流。如果您在作更改之前未停止相关的消息流,则无法通过运行消息流保证更改的顺序,并且在更改的样式表之间会产生不兼容。您可以使用 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 系统上,该文件位于 <代理工作路径>\common\log
    • UNIX 系统上,该文件位于 <代理工作路径>\common\log

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

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

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

  9. 更新开始停止和重新启动执行组。更新结束
如果您正在处理大型 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(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 对消息进行解码。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac12490_