>我需要将 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
)。
将其放在"如果"结构中,或者根据您的解决方案选择/何时结构。