数据转换 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 操作。
我有以下 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 操作。