用于 BizTalk 映射和更改节点名称的 XSLT



>我需要将 2 个字段从大模式映射到小架构(下图),以生成要发送的消息以进行 Web 服务调用。

<xs:element name="ds">
     <xs:complexType>
         <xs:sequence>
             <xs:element name="ID" type="xs:string"></xs:element>
             <xs:element name="d1" type="xs:string"></xs:element>
         </xs:sequence>
     </xs:complexType>
 </xs:element>

相同的 Web 方法用于更新许多不同的项目,因此包含 2 个参数:ID 和另一个常规更新字段,该字段将采用更新的文本值。

ID 参数

始终称为 ID,但根据我必须更新的项目类型,第二个参数将更改其名称。

因此,在 BizTalk 映射(我猜应该是 XSLT)中:映射的第一个字段是 ID 字段,从源中的 TargetID 到目标中的 ID。 这是一个直接映射。第二个字段将始终映射到名为"d1"的字段。基于 xsl:if,d1 的节点名称将更改。例如:

如果大型架构中的 changeType = 'forename',d1 将变为d_forename

如果大型架构中的 changeType = '姓氏',d1 将变为 d_surname,依此类推。

将会有大约 20 种可能的 changeType,所以我想我的问题是,如果我使用 xsl:select 来评估 changeType(这将给我我的 ID 和更新值),我如何同时返回<d1>节点的新名称? 我知道这将是一个所谓的模板,但不确定从哪里开始。

您正在寻找的大概是围绕元素命名的可能性。

大多数情况下发生的情况如下:

<d_someOtherNode>
  <xsl:value-of select="/root/someOtherNode/text()" />
</d_someOtherNode>

但是,您还可以做的是:

<xs:element name="{concat('d_', name(/root/someOtherNode))}">
      <xsl:value-of select="/root/someOtherNode/text()" />
</xs:element>

后者允许您随意命名元素,在这种情况下,连接所需元素的d_和名称(someOtherNode)。

将其放在"如果"结构中,或者根据您的解决方案选择/何时结构。

相关内容

  • 没有找到相关文章