【发布时间】:2020-11-03 09:13:31
【问题描述】:
我得到了低于数据库的输出,因此我必须根据 Composite_name 和 RN 元素对数据进行分组。
来自数据库的输出 -
<SelectFlowIdDetailsFromSOAInfraOutputCollection>
<SelectFlowIdDetailsFromSOAInfraOutput>
<FLOW_ID>200239</FLOW_ID>
<COMPOSITE_NAME>ABC</COMPOSITE_NAME>
<rn>1</rn>
</SelectFlowIdDetailsFromSOAInfraOutput>
-<SelectFlowIdDetailsFromSOAInfraOutput>
<FLOW_ID>200247</FLOW_ID>
<COMPOSITE_NAME>ABC</COMPOSITE_NAME>
<rn>1</rn>
</SelectFlowIdDetailsFromSOAInfraOutput>
<SelectFlowIdDetailsFromSOAInfraOutput>
<FLOW_ID>200301</FLOW_ID>
<COMPOSITE_NAME>GHI</COMPOSITE_NAME>
<rn>1</rn>
</SelectFlowIdDetailsFromSOAInfraOutput>
<SelectFlowIdDetailsFromSOAInfraOutput>
<FLOW_ID>200300</FLOW_ID>
<COMPOSITE_NAME>GHI</COMPOSITE_NAME>
<rn>1</rn>
</SelectFlowIdDetailsFromSOAInfraOutput>
</SelectFlowIdDetailsFromSOAInfraOutputCollection>
我必须在 Composite_name 和 rn 上执行 group by 以便预期的输出应该是
<RRR>
<XYZ>
<COMPOSITE_NAME>abc</COMPOSITE_NAME>
FLOW_ID>200239,200247</FLOW_ID>
</XYZ>
<XYZ>
<COMPOSITE_NAME>GHI</COMPOSITE_NAME>
FLOW_ID>200300,200301</FLOW_ID>
</XYZ>
</RRR>
我在 XSLT 下使用过,但没有得到预期的输出。
<xsl:for-each-group select="/ns0:SelectFlowIdDetailsFromSOAInfraOutputCollection/ns0:SelectFlowIdDetailsFromSOAInfraOutput" group-by="concat(ns0:COMPOSITE_NAME ,'|', ns0:rn)">
<tns:EmailBody>
<tns:InterfaceName>
<xsl:value-of select="ns0:COMPOSITE_NAME"/>
</tns:InterfaceName>
<tns:FaultedId>
<xsl:for-each select="current-group">
<xsl:value-of select="ns0:FLOW_ID"/>
<xsl:if test="not(position() = last())">,</xsl:if>
</xsl:for-each>
</tns:FaultedId>
</tns:EmailBody>
</xsl:for-each-group>
请帮助我正确的逻辑来实现输出。
谢谢!
【问题讨论】:
-
大家好,您能帮我解决一下这个逻辑吗?
标签: xslt xslt-2.0 xslt-grouping