【问题标题】:how to use for-each-group by to group values in XSLT 2.0如何使用 for-each-group by 在 XSLT 2.0 中对值进行分组
【发布时间】: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


【解决方案1】:

你的尝试毫无意义。看起来您从各种来源复制了 sn-ps 并以随机顺序将它们放在一起,希望它们能以某种方式将自己组合成一个功能代码。这可能适用于哈利波特电影,而不是编程。

改用简单的教科书方法:

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="/SelectFlowIdDetailsFromSOAInfraOutputCollection">
    <RRR>
        <xsl:for-each-group select="SelectFlowIdDetailsFromSOAInfraOutput" group-by="concat(COMPOSITE_NAME ,'|', rn)">
            <XYZ>
                <COMPOSITE_NAME>
                    <xsl:value-of select="COMPOSITE_NAME"/>
                </COMPOSITE_NAME>
                <FLOW_ID>
                    <xsl:value-of select="current-group()/FLOW_ID" separator=","/>
                </FLOW_ID>
            </XYZ>
        </xsl:for-each-group>
    </RRR>
</xsl:template>
        
</xsl:stylesheet>

演示:https://xsltfiddle.liberty-development.net/3MEdvgZ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2022-01-12
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多