我有来自数据库查询的以下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> `
我需要如何变换:
<Data>
<User Name="XYZ">
<DETAILS>
<COURSE>IS</COURSE>
<YEAR>2016</YEAR>
<SUBJECT>COMPUTER SCIENCE<SUBJECT>
</DETAILS>
<DETAILS>
<COURSE>IS</COURSE>
<YEAR>2015</YEAR>
<SUBJECT>INFO SCIENCE<SUBJECT>
</DETAILS>
</User>
</Data>
答案 0 :(得分:0)
我假设您在邮件中拥有唯一具有属性的用户。如果有用户名=&#34; XYZ&#34;这保证了文档不包含任何具有属性Name的用户!=&#34; XYZ&#34;
您可以使用下一个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>
答案 1 :(得分:0)
ForEach介体用于转换数据段并将其替换为原始有效负载。迭代介体不用于转换。它用于调用后端和聚合响应。有关详细信息,请参阅https://docs.wso2.com/display/ESB500/ForEach+Mediator。
从您在此处添加的示例中,您似乎需要通过用户名合并结果。因此,你不能使用ForEach,迭代调解员。但是,您可以使用Script mediator,但最好使用XSLT介体,因为它是一种直接且简单的XML操作。