View Single Post
  #6 (permalink)  
Old August 14th, 2010, 10:11 AM
Martin Honnen Martin Honnen is offline
Friend of Wrox
Points: 6,676, Level: 34
Points: 6,676, Level: 34 Points: 6,676, Level: 34 Points: 6,676, Level: 34
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
Join Date: Nov 2007
Location: Germany
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts

If the input is
<?xml version="1.0" encoding="UTF-8"?>
    <box id="a1" size="24" status="saled">
    <box id="a2" size="64" status="instore">
    <box id="a3" size="36" status="instore">
    <box id="a4" size="42" status="instore"/>
    <box id="a5" size="43" status="saled"/>
    <bag id ="b1" sive="16x20" status="instore"><numberofbook>12</numberofbook></bag>
    <bag id ="b2" sive="10x10" status="instore"><numberofbook>8</numberofbook></bag>
    <bag id ="b3" sive="16x10" status="instore"><numberofbook>10</numberofbook></bag>
    <bag id ="b4" sive="16x20" status="saled"></bag>
    <bag id ="b5" sive="16x20"><numberofbook>13</numberofbook></bag>
    <can id = "c1" size ="100m3" status="instore"><oil>3l</oil></can>
    <can id = "c2" size ="120m3" status="saled"><oil>4l</oil></can>
    <can id = "c3" size ="200m3" status="instore"></can>
    <can id = "c4" size ="210m3" status="saled"><oil>4l</oil></can>
    <can id = "c5" size ="220m3" status="instore"><oil>5l</oil></can>
    <can id = "c6" size ="300m3" status="saled" ><oil>13l</oil></can>

then the XSLT 2.0 stylesheet
  <xsl:strip-space elements="*"/>
  <xsl:output indent="yes"/>
  <xsl:template match="listcontainer">
      <xsl:for-each-group select="*" group-by="@status">
        <xsl:element name="{current-grouping-key()}_goods">
          <xsl:apply-templates select="current-group()"/>
  <xsl:template match="box[*] | bag[*] | can[*]">
    <xsl:element name="notempty_{local-name()}"/>
  <xsl:template match="box[not(*)] | bag[not(*)] | can[not(*)]">
    <xsl:element name="empty_{local-name()}"/>
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
Reply With Quote
The Following User Says Thank You to Martin Honnen For This Useful Post:
metinhoclam (August 14th, 2010)