Subject: [xsl] Group by Element based on Attribute inside container using 1.0 From: "Friend, Darris E" <FRIENDDE@xxxxxxx> Date: Thu, 6 Nov 2008 12:35:36 -0500 |
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[@ns2]"/--> <xsl:key name="target-node-set" match="//GeodatabaseRelationships/ObjectClassRows/ObjectClassRow/ObjectClassF ield" 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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] floor() and idiv, Michael Kay | Thread | Re: [xsl] Group by Element based on, Michael Ludwig |
Re: [xsl] floor() and idiv, mozer | Date | Re: [xsl] floor() and idiv, David Carlisle |
Month |