xsl-list
[Top] [All Lists]

[xsl] Group by Element based on Attribute inside container using 1.0

2008-11-06 12:36:01
I am new to the XML/XSL world, I hope the terminology of the subject line 
correctly reflects my problem. I am using 1.0 and can not use 2.0. All client 
machines will use IE6 on Windows XP machines to view the report. I can not 
alter the XML output/format. I can only create an XSL to show the data in a 
report.

I have read and tried many examples this week concerning the Muenchian method. 
The examples are good but the XML format used in the examples seems simpler 
than the format I am using. I have made great effort in altering Jenni 
Tennison's example. The best I can do for output is based on this example 
http://www.zvon.org/xxl/XSLTreference/OutputOverview/xslt_key_frame.html 
However it does not group.

What I need is to group by (and sort) the valve number, list the inspections 
for that valve sorted by the most recent date (if sort by a date is possible). 
For example:
ValveNumber: 992
DateInspected1 InspectedBy1 RepairsMade1 ...
DateInspected2 InspectedBy2 ReapirsMade2 ...
ValveNumber: 993
DateInspected1 InpsectedBy1 ReapirsMade1 ...

Some of the hurdles I need to overcome are how to assign the correct variables 
for the Key and properly format the Count or GenerateID method as described in 
Jenni's examples.

Some of my efforts:
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"; version = 
"1.0" > 
            <xsl:output method = "text" /> 

            <xsl:key name = "keyFacilityID" match = "ObjectClassField" use = 
"@name" /> 

            <xsl:template match = "/" > 
                        <xsl:apply-templates select = 
"ObjectClassField[count(.| key('keyFacilityID','Valve 
Number')[1])=1]"><!--"key('keyFacilityID','Valve Number')"--> 
                        <xsl:sort/>
                        </xsl:apply-templates>
            </xsl:template> 

            <xsl:template match = "ObjectClassField" > 
                        <xsl:text >
                        </xsl:text> 
                        <xsl:value-of select = "@name"/>
                        <xsl:text >
                        </xsl:text>
                        <xsl:value-of select = "." />
            </xsl:template> 
</xsl:stylesheet>

*********************
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"; version = 
"1.0" > 
            <xsl:output method = "text" /> 

            <xsl:variable name="varFaciltyID" 
select="//GeodatabaseRelationships/ObjectClass/ObjectClassRows/ObjectClassRow/ObjectClassField/@name"/>
    <!--xsl:variable name="ns2" select="wrapper/st[(_at_)ns2]"/-->
    <xsl:key name="target-node-set" 
match="//GeodatabaseRelationships/ObjectClassRows/ObjectClassRow/ObjectClassField"
 use="."/>

<xsl:template match="/">
  Valve:
      <xsl:for-each select="$varFacilityID">
      "<xsl:value-of select="."/>"
    </xsl:for-each>

</xsl:template>

</xsl:stylesheet>

************

The XML data:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='C:\GISData\MobileConfiguration\Valve 
Report.xsl'?>
<ReportDefinition>
  <ReportObject name="gasValve">
    <ObjectClass name="Gas Valve">
      <ObjectClassFieldDefinition />
      <ObjectClassRows>
        <ObjectClassRow OBJECTID="41676" />
        <ObjectClassRow OBJECTID="41677" />
      </ObjectClassRows>
    </ObjectClass>
    <GeodatabaseRelationships>
      <ObjectClass name="GVALVEINSPECTION">
        <ObjectClassFieldDefinition>
          <FieldDefinition>Valve Number</FieldDefinition>
          <FieldDefinition>Date Inspected</FieldDefinition>
          <FieldDefinition>Inspected By</FieldDefinition>
          <FieldDefinition>Repairs Made</FieldDefinition>
          <FieldDefinition>Valve Position Found</FieldDefinition>
          <FieldDefinition>Valve Position Left</FieldDefinition>
          <FieldDefinition>Notes</FieldDefinition>
        </ObjectClassFieldDefinition>
        <ObjectClassRows>
          <ObjectClassRow OBJECTID="629">
            <ObjectClassField name="Valve Number">993</ObjectClassField>
            <ObjectClassField name="Date 
Inspected">01/31/2000</ObjectClassField>
            <ObjectClassField name="Inspected By">Wingenbach</ObjectClassField>
            <ObjectClassField name="Repairs Made">N</ObjectClassField>
            <ObjectClassField name="Valve Position Found" />
            <ObjectClassField name="Valve Position Left" />
            <ObjectClassField name="Notes" />
          </ObjectClassRow>
          <ObjectClassRow OBJECTID="1626">
            <ObjectClassField name="Valve Number">993</ObjectClassField>
            <ObjectClassField name="Date 
Inspected">02/28/2001</ObjectClassField>
            <ObjectClassField name="Inspected By">Ukweli</ObjectClassField>
            <ObjectClassField name="Repairs Made">N</ObjectClassField>
            <ObjectClassField name="Valve Position Found" />
            <ObjectClassField name="Valve Position Left" />
            <ObjectClassField name="Notes" />
          </ObjectClassRow>
          <ObjectClassRow OBJECTID="1697">
            <ObjectClassField name="Valve Number">992</ObjectClassField>
            <ObjectClassField name="Date 
Inspected">03/13/2002</ObjectClassField>
            <ObjectClassField name="Inspected By">Ukweli</ObjectClassField>
            <ObjectClassField name="Repairs Made">N</ObjectClassField>
            <ObjectClassField name="Valve Position Found" />
            <ObjectClassField name="Valve Position Left" />
            <ObjectClassField name="Notes" />
          </ObjectClassRow>
          <ObjectClassRow OBJECTID="1212">
            <ObjectClassField name="Valve Number">992</ObjectClassField>
            <ObjectClassField name="Date 
Inspected">03/22/1989</ObjectClassField>
            <ObjectClassField name="Inspected By">Wingenbach</ObjectClassField>
            <ObjectClassField name="Repairs Made">N</ObjectClassField>
            <ObjectClassField name="Valve Position Found" />
            <ObjectClassField name="Valve Position Left" />
            <ObjectClassField name="Notes" />
          </ObjectClassRow>
        </ObjectClassRows>
      </ObjectClass>
    </GeodatabaseRelationships>
  </ReportObject>
</ReportDefinition>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--