为流中的操作编写 XML 输出
通过使用 IBM® App Connect 流程中前一个事件或操作返回的数据,您可以在操作节点内组成 XML 输出。 XML 使用一种通用格式来存储和传输结构化数据。 您可以使用 XML 合成功能在流程中的两个集成应用程序之间分发这些数据。
从流中,可以选择 XML 作为操作节点中任何字符串字段 (由 abc 表示法标识) 的目标格式,然后定义 XML 输出的结构和内容。

要定义 XML 输出,请导入 XML 模式定义 (XSD) 文件,该文件定义要作为输出基础的 XML 文档结构。 导入文件后,字符串字段的格式将转换为 XML。 导入文件中的 XML 元素显示为嵌套字段,符合文件中定义的结构和数据类型。 将这些字段映射到先前方式的数据后, XML 输出将构造为 "在内存中" ,并在运行流时写入目标应用程序。 XML 组合函数的可能用例可能是在支持创建附件的文件管理应用程序或 CRM 应用程序中创建 XML 文件。
XSD 导入的准则和限制
请查看这些准则和限制,以了解要导入的 XSD 文件中支持的模式定义。
- 支持具有单个名称空间定义的单个 XSD 文件。 目前不支持包含多个 XSD 文件的 .zip 文件。
- 不支持以下元素:
xsd:import(将模式组件从其他名称空间导入到 XSD 文档中)xsd:include(导入同一名称空间中的模式组件)xsd:redefine(重新定义从外部模式获取的简单和复杂类型,组和属性组)
- 包含引用的模式必须指定目标名称空间才能正确呈现。
- 不支持
targetclass。 - 将合并
xsd:choice子元素,从而允许访问所有子元素,而不是仅提供一个选项。 - 在引用变为递归结构之前,将对其进行跟踪和扩展。
- 要为任何扩展或受限的
complexType元素指定覆盖或精确的命名空间和类型,请在 JSON 中添加$xsiType作为属性。'Address': { '$attributes': { '$xsiType': { 'type': 'overrideType', 'xmlns': 'overrideNS' } }, 'HouseNumber': 23 }
定义 XML 输出的结构和内容
以下场景描述了如何从流程中的字段组成 XML 输出。 在这种情况下,您要提取数据库中记录的订单发货详细信息。 然后,您可以将详细信息保存到 Box 中的 XML 文件中,以便采取进一步行动。 您构建了一个流程,其中包括 IBM Db2® 为要检索的数据检索 TABLE 记录的
操作。
检索记录操作。


接着,添加一个 Box 操作,创建一个扩展名为 .xml 的文件,然后生成一个 XML 模式,定义 XML 文件的结构和内容。 要生成此模式,需要一个描述 XML 内容元素的 XSD 文件。
- 从 创建文件 操作的 Box 节点中,指定要保存该文件的文件夹,然后添加要创建的 XML 文件的名称。
图 4: Box 节点中的文件夹和文件名选择 
- 在 文件内容 字段中,单击 abc ,然后选择 XML。 (您可以使用该字段编写 XML 内容)
图 5。 选择 XML 作为字符串字段的格式 
- 在 XML 模式设置面板中,将 XSD 文件从其在打开的文件浏览器中的位置拖入方框区域。 或者,您也可以点击方框内的区域,打开文件浏览器,找到 .xsd 文件。 您可以在方框内看到文件名。
图 6。 要导入的装箱区域中的 XSD 文件的示例
下面的示例显示了 XSD 内容示例(根据 https://www.w3.org/ 定制)。<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="fionasnamespace"> <xs:element name="shiporders"> <xs:complexType> <xs:sequence> <xs:element name="shiporder" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="orderid" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> - 如果 XSD 文件包含全局元素,请从全局元素列表中选择一个全局元素名称,以确定使用模式的哪一部分来定义 XML 输出结构。 (具有单个全局元素的 XSD 文件默认显示该元素名称)
- 单击 导入 以显示 XML 元素和结构的基于字段的表示。
图 7。 XML 元素和结构的基于字段的表示 
- 通过映射到 Db2 字段来定义 XML 数据内容。
图 8。 映射到 Db2 字段的 XML 字段 
- 要更改为嵌套字段定义的结构、字段标签或数据类型,请单击重新生成模式。 (此操作会删除任何已定义的映射) 在 XML 模式设置面板中,清除之前的任何设置,然后添加一个具有相应 XML 模式的 XSD 文件。
- 如果要将 XML 输出发送到文件,请务必指明文件类型为文本(而非二进制)。
运行流程时,将获得一个具有指定结构和格式的 XML 文件。 下图显示的是为前一个方案生成的 XML 文件。

处理生成的 XML 输出示例
您可以通过多种方式使用 XML 合成函数生成的 XML 输出,以完成相同或不同流程中的操作,或用于外部。 在此示例中,您要使用在上一方案中生成的 XML 文件为其他应用程序中的订单创建出货记录。
您可以在流程中添加 "框检索文件 "操作,以检索 XML 文件的内容。 然后,您可以添加一个 XML 解析器节点来解析文件内容并生成输出模式,以便在随后的创建
操作中用来映射 XML 数据。


接下来,添加 For each 节点,然后指定要处理的项目集合。 在这种情况下,会选择来自 XML 解析器的 shiporder 项数组。

通过在每个节点中使用创建
操作,可以从 XML 解析器映射到 XML 内容。 然后,您就可以在相应的应用程序中创建相关记录。