代码之家  ›  专栏  ›  技术社区  ›  ravthiru

分组与身份转换

  •  0
  • ravthiru  · 技术社区  · 6 年前

    如何同时应用身份转换和分组

      <items>
            <user>
              <id>8788989</id>
             <firstname>test</firstname>
             <lastname>user</lastname>
            </user>
            <info>test xml</info>
            <fromdate><fromdate>
            <todate></todate>
    
            <item id="123" name="Java">
                <price>1</price>
                <description></description> 
            </item>
    
            <item id="123" name="Java and XML">
                <price>2</price>
                <description></description> 
            </item>
    
            <item id="234" name="python">
                <price>3</price>
                <description></description> 
            </item>
    
            <item id="234" name="scala">
                <price>3</price>
                <description></description> 
            </item>
    
          </items>
    

     <items>
            <user>
              <id>8788989</id>
             <firstname>test</firstname>
             <lastname>user</lastname>
            </user>
            <info>test xml</info>
            <fromdate><fromdate>
            <todate></todate>
             <group>  
                <item id="123" name="Java">
                    <price>1</price>
                    <description></description> 
                </item>
    
                <item id="123" name="Java and XML">
                   <price>2</price>
                   <description></description> 
                </item>
            </group>
    
            <group>
               <item id="234" name="python">
                  <price>3</price>
                  <description></description> 
               </item>
    
               <item id="234" name="scala">
                  <price>3</price>
                  <description></description> 
               </item>
           </group>
       </items>
    

    已对项目/@id进行分组

    1 回复  |  直到 6 年前
        1
  •  1
  •   Amrendra Kumar    6 年前

    您可以这样分组:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
    
        <xsl:output indent="yes"/>
    
        <xsl:template match="@* | node()">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="items">
            <items>
                <xsl:apply-templates select="* except item"/>
                <xsl:for-each-group select="item" group-by="@id">
                    <group>
                        <xsl:apply-templates select="../item[@id = current()/@id]"/>
                    </group>
                </xsl:for-each-group>
            </items>
        </xsl:template>
    
    </xsl:stylesheet>
    

    最新答案:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
    
        <xsl:output indent="yes"/>
    
        <xsl:template match="@* | node()">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="items">
            <items>
                <xsl:apply-templates select="* except item"/>
                <xsl:for-each-group select="item" group-by="@id">
                    <group>
                        <xsl:apply-templates select="current-group()"/>
                    </group>
                </xsl:for-each-group>
            </items>
        </xsl:template>
    
    </xsl:stylesheet>