0

我试图用以下场景制作一个复杂的映射(对我来说很复杂):

在:

<root>
    <bigrow>
        <row>1</row>
        <row>second</row>
        <row>third</row>
    </bigrow>
    <bigrow>
        <row>4</row>
        <row>rowvalue</row>
        <row>anotherrowvalue</row>
    </bigrow>
</root>

出去:

<entities>
    <entity>
        <atributeA>1</atributeA>
        <atributeB>some</atributeB>
        <atributeC>value</atributeC>
    </entity>
    <entity>
        <atributeA>2</atributeA>
        <atributeB>another</atributeB>
        <atributeC>valuee</atributeC>
    </entity>
    <entity>
        <atributeA>3</atributeA>
        <atributeB>ooother</atributeB>
        <atributeC>valueee</atributeC>
    </entity>
</entities>

我想按顺序映射条目中的行元素,因此所需的结果需要是这样的:

<entities>
    <entity>
        <atributeA>1</atributeA>
        <atributeB>second</atributeB>
        <atributeC>third</atributeC>
    </entity>
    <entity>
        <atributeA>4</atributeA>
        <atributeB>rowvalue</atributeB>
        <atributeC>anotherrowvalue</atributeC>
    </entity>
</entities>

我创建了将条目和输出作为 XML 的地图,并从这两个 xml 生成模式,dataMapper 窗口如下所示:

http://i.stack.imgur.com/6CYrR.png

我找不到如何让它工作......如果有人可以帮助我,你会让我开心=)

4

1 回答 1

0

Mule 带有一个 XSL-T 转换器,因此,如果您有兴趣,这里是无需使用 DataMapper 的重型火炮即可实现您的目标的转换。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <entities>
      <xsl:apply-templates />
    </entities>
  </xsl:template>

  <xsl:template match="bigrow">
    <entity>
      <atributeA>
        <xsl:value-of select="child::row[position()=1]/text()" />
      </atributeA>
      <atributeB>
        <xsl:value-of select="child::row[position()=2]/text()" />
      </atributeB>
      <atributeC>
        <xsl:value-of select="child::row[position()=3]/text()" />
      </atributeC>
    </entity>
  </xsl:template>
</xsl:stylesheet>
于 2013-04-16T17:55:52.587 回答