用于 BizTalk 映射和更改节点名称的 XSLT
XSLT for BizTalk mapping and changing node name
我需要将 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>
相同的网络方法用于更新许多不同的项目,因此包含 2 个参数:ID 和另一个通用更新字段,它将采用更新的文本值。
ID 参数始终称为 ID,但根据我必须更新的项目类型,第二个参数将更改其名称。
因此,在 BizTalk 映射中(我猜应该是 XSLT):
映射的第一个字段是 ID 字段,从源中的 TargetID 到目标中的 ID。这是一个直接映射。
第二个字段将始终映射到名为 'd1' 的字段。
基于一个xsl:if,d1的节点名称会发生变化。
例如:
if changeType in large schema = 'forename', d1 将变为 d_forename
如果大型模式中的 changeType = 'surname',d1 将变为 d_surname 等等。
大约有 20 种可能的 changeType,所以我想我的问题是,如果我使用 xsl:choose 来评估 changeType(这将给我我的 ID 和更新值)我怎么能在同时return节点的新名称为<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
)。
根据您的解决方案,将其放入 "if" 结构或 choose/when 结构中。
我需要将 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>
相同的网络方法用于更新许多不同的项目,因此包含 2 个参数:ID 和另一个通用更新字段,它将采用更新的文本值。
ID 参数始终称为 ID,但根据我必须更新的项目类型,第二个参数将更改其名称。
因此,在 BizTalk 映射中(我猜应该是 XSLT): 映射的第一个字段是 ID 字段,从源中的 TargetID 到目标中的 ID。这是一个直接映射。 第二个字段将始终映射到名为 'd1' 的字段。 基于一个xsl:if,d1的节点名称会发生变化。 例如:
if changeType in large schema = 'forename', d1 将变为 d_forename
如果大型模式中的 changeType = 'surname',d1 将变为 d_surname 等等。
大约有 20 种可能的 changeType,所以我想我的问题是,如果我使用 xsl:choose 来评估 changeType(这将给我我的 ID 和更新值)我怎么能在同时return节点的新名称为<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
)。
根据您的解决方案,将其放入 "if" 结构或 choose/when 结构中。