需要XSL中的分组才能以XML格式输出所需结果
源XML为:
?- marks_chemistry(paul).
Paul got 85/100
true.
必需的输出XML为:
<DATA_DS>
<G_REQUEST_ID>3060814</G_REQUEST_ID>
<LIST_PROJECT_ERROR>
<PROJECT_ERROR>
<PROJECT_ERROR_LINE>1</PROJECT_ERROR_LINE>
<ERROR_PROJECT_NUMBER>SB100000223</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error1</PROJECT_ERR_MSG>
</PROJECT_ERROR>
<PROJECT_ERROR>
<PROJECT_ERROR_LINE>2</PROJECT_ERROR_LINE>
<ERROR_PROJECT_NUMBER>SB100000223</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error2</PROJECT_ERR_MSG>
</PROJECT_ERROR>
<PROJECT_ERROR>
<PROJECT_ERROR_LINE>3</PROJECT_ERROR_LINE>
<ERROR_PROJECT_NUMBER>SB100000225</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error5</PROJECT_ERR_MSG>
</PROJECT_ERROR>
<PROJECT_ERROR>
<PROJECT_ERROR_LINE>4</PROJECT_ERROR_LINE>
<ERROR_PROJECT_NUMBER>SB100000225</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error6</PROJECT_ERR_MSG>
</PROJECT_ERROR>
</LIST_PROJECT_ERROR>
</DATA_DS>
请为每个循环提供xsl 2.0使用。需要在Oracle ICS中使用此转换。
我很抱歉在评论中添加问题。 需要串联组中重复元素的值。需要保留单个元素以便重复。需要指导。
必需的输出是
<DATA_DS>
<G_REQUEST_ID>3060814</G_REQUEST_ID>
<LIST_PROJECT_ERROR>
<PROJECT_ERROR>
<ERROR_PROJECT_NUMBER>SB100000223</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error1</PROJECT_ERR_MSG>
<PROJECT_ERR_MSG>Error2</PROJECT_ERR_MSG>
</PROJECT_ERROR>
<PROJECT_ERROR>
<ERROR_PROJECT_NUMBER>SB100000225</ERROR_PROJECT_NUMBER>
<PROJECT_ERR_MSG>Error5</PROJECT_ERR_MSG>
<PROJECT_ERR_MSG>Error6</PROJECT_ERR_MSG>
</PROJECT_ERROR>
</LIST_PROJECT_ERROR>
</DATA_DS>
答案 0 :(得分:1)
在 XSLT 2.0 中,您可以轻松执行以下操作:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/DATA_DS">
<xsl:copy>
<xsl:copy-of select="G_REQUEST_ID"/>
<LIST_PROJECT_ERROR>
<xsl:for-each-group select="LIST_PROJECT_ERROR/PROJECT_ERROR" group-by="ERROR_PROJECT_NUMBER">
<xsl:copy>
<xsl:copy-of select="ERROR_PROJECT_NUMBER"/>
<xsl:copy-of select="current-group()/PROJECT_ERR_MSG"/>
</xsl:copy>
</xsl:for-each-group>
</LIST_PROJECT_ERROR>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
要获得问题附加内容中显示的结果,请更改:
<xsl:copy-of select="current-group()/PROJECT_ERR_MSG"/>
收件人:
<PROJECT_ERR_MSG>
<xsl:value-of select="current-group()/PROJECT_ERR_MSG" separator="+"/>
</PROJECT_ERR_MSG>