Biztalk映射:将不同的节点分组到列表中

时间:2010-04-16 16:01:52

标签: xml biztalk biztalk-mapper xslt

有没有办法在BT映射器中实现以下转换?如果没有,任何聪明的想法?

<Person>
<Age>25</Age>
<Name>Paul</Name>
</Person>

为:

<Person>
<CustomProperties>
<CustomProperty>
<Name>Age</Name>
<Value>25</VAlue>
</CustomProperty>
<CustomProperty>
<Name>Name</Name>
<Value>Paul</VAlue>
</CustomProperty>
</CustomProperties>

我必须在节点列表中聚合一些元素。

提前致谢。

3 个答案:

答案 0 :(得分:3)

您还可以在地图中使用TableLooping / TableExtractor functoid来构建目标节点。

请参阅此帖子以获取示例:

http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html

答案 1 :(得分:2)

对BizTalk映射器不太了解,但所需的XSLT非常简单:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Person">
    <xsl:copy>
      <CustomProperties>
        <xsl:apply-templates select="*" />
      </CustomProperties>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Person/*">
    <CustomProperty>
      <Name><xsl:value-of select="name()" /></Name>
      <Value><xsl:value-of select="." /></Value>
    </CustomProperty>
  </xsl:template>
</xsl:stylesheet>

答案 2 :(得分:0)

看起来你有一个从输入到输出的直接映射。执行映射时,右键单击从输入到输出的线。选择“属性”。可以选择复制输入节点的值或输入节点的名称。您可以使用每个子节点中的两个映射,一个用于提取名称,另一个用于值。