数据转换 WS02

Data Transformation WS02

我有以下 XML 来自数据库查询,需要将结果发送到 API 调用。但是我想以不同的格式转换数据,我该怎么做。 任何帮助,将不胜感激。

来自数据库的结果:

    `<Data>  
      <User Name="XYZ">
        <DETAILS>
           <COURSE>IS</COURSE>
           <YEAR>2016</YEAR>
           <SUBJECT>COMPUTER SCIENCE<SUBJECT>         
         </DETAILS>
       </User>
       <User Name="XYZ">
        <DETAILS>
           <COURSE>IS</COURSE>
           <YEAR>2015</YEAR>
           <SUBJECT>INFO SCIENCE<SUBJECT>         
       </DETAILS>
      </User>
     </Data> `

我需要如何转换: <数据><br> <用户名="XYZ"> <详情> <课程>是</课程> <YEAR>2016</YEAR> <主题>计算机科学<主题> </详情> <详情> <课程>是</课程> <YEAR>2015</YEAR> <学科>信息科学<学科><br> </详情> </用户> </数据>

我假设您在消息中有具有属性的唯一用户。如果有 Name="XYZ" 的用户保证文档不包含任何其他具有属性 Name!="XYZ"

的用户

您可以使用下一个 xslt 转换

<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
</xsl:template>

<xsl:template match="Data">
    <xsl:element name="{local-name(User[last()])}">
        <xsl:copy-of select="User/@*" />
        <xsl:copy-of select="User/*" />
    </xsl:element>
</xsl:template>

ForEach mediator 用于转换数据段并将其替换为原始有效负载。 Iterate mediator 本身不用于转换。它用于调用后端和聚合响应。详情请参考https://docs.wso2.com/display/ESB500/ForEach+Mediator

从您在此处添加的示例来看,您似乎需要通过用户名合并结果。因此,您不能使用 ForEach、Iterate 调解器。但是,您可以使用 Script 介体,但最好使用 XSLT 介体,因为它是一种直接且简单的 XML 操作。