Subject: [xsl] cross-reference & xsl:sort - MSXML3 vs MSXML4 From: David Chryst <dchryst@xxxxxxxxx> Date: Mon, 15 Apr 2002 15:44:15 -0700 (PDT) |
I want to pass in a collection/@name and get a list of all the corresponding part elements (cross refence). Then I want to sort the data first by part/@type, then by part/@name. I lifted the sample xml from a similar note posted to this list in October 2001. That email is duplicated at the bootom. I never did see that problem answered. First, I added a little more sample data (groupC) to the xml: <large-collection> <part id="1" type="type-a" name="name-a"/> <part id="2" type="type-a" name="name-b"/> <part id="3" type="type-b" name="name-c"/> <part id="4" type="type-d" name="name-d"/> <part id="5" type="type-b" name="name-e"/> <part id="6" type="type-c" name="name-f"/> <part id="7" type="type-d" name="name-g"/> <part id="8" type="type-b" name="name-h"/> <part id="9" type="type-c" name="name-i"/> ... <collection name = "groupA"> <ref refid="1"/> <ref refid="3"/> </collection> <collection name = "groupB"> <ref refid="3"/> <ref refid="4"/> </collection> <collection name = "groupC"> <ref refid="1"/> <ref refid="2"/> <ref refid="3"/> <ref refid="4"/> <ref refid="5"/> <ref refid="6"/> <ref refid="7"/> <ref refid="8"/> <ref refid="9"/> </collection> </large-collection> here's my XSL: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" /> <xsl:variable name="MyGroup">groupC</xsl:variable> <xsl:template match="/large-collection/collection"> <xsl:if test="./@name=$MyGroup"> <xsl:for-each select="ref"> <xsl:sort select="/large-collection/part[@id = (current())/@refid]/@type" order="ascending"/> <xsl:sort select="/large-collection/part[@id = (current())/@refid]/@name" order="ascending"/> type: <xsl:value-of select="concat(/large-collection/part[@id = (current())/@refid]/@type, ' name: ', /large-collection/part[@id = (current())/@refid]/@name, ' id: ', /large-collection/part[@id = (current())/@refid]/@id)"/> </xsl:for-each> </xsl:if> </xsl:template> </xsl:stylesheet> I ran this XSLT script using MSXML3 DOM and Processor and got this output: type: type-a name: name-a id: 1 type: type-a name: name-b id: 2 type: type-b name: name-c id: 3 type: type-b name: name-e id: 5 type: type-b name: name-h id: 8 type: type-c name: name-f id: 6 type: type-c name: name-i id: 9 type: type-d name: name-d id: 4 type: type-d name: name-g id: 7 Note the output is sorted correctly (By type, then by name). Now look at the output I get running that same script using MSXML4: type: type-a name: name-a id: 1 type: type-a name: name-b id: 2 type: type-b name: name-c id: 3 type: type-d name: name-d id: 4 type: type-b name: name-e id: 5 type: type-c name: name-f id: 6 type: type-d name: name-g id: 7 type: type-b name: name-h id: 8 type: type-c name: name-i id: 9 This data is in document order! What gives? David >Hi, following is an example of an xml structure that I >require grouped through the use of cross references >based on a parameterised filter value. The xml >structure is fairly large so the use of keys to lookup >the 'part' element is highly desirable. >I am currently using xsl:param to define a filter >value for 'collection@name' having got that I need to >return a result set that for all the 'parts' referred >to by 'ref@refid' references in the 'collection' >grouped by 'part@type', sorted with in each group by >'part@name'. It would also be desirable to have the >result set assigned to an xsl:variable. <large-collection> <part id="1" type="type-a" name="name-a"/> <part id="2" type="type-a" name="name-b"/> <part id="3" type="type-b" name="name-c"/> <part id="4" type="type-d" name="name-d"/> <part id="5" type="type-b" name="name-e"/> <part id="6" type="type-c" name="name-f"/> <part id="7" type="type-d" name="name-g"/> <part id="8" type="type-b" name="name-h"/> <part id="9" type="type-c" name="name-i"/> ... <collection name = "groupA"> <ref refid="1"/> <ref refid="3"/> </collection> <collection name = "groupB"> <ref refid="3"/> <ref refid="4"/> </collection> </large-collection> >Cheers >Tom Hall __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://taxes.yahoo.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] sum for a specific attrib, Michael Kay | Thread | Re: [xsl] cross-reference & xsl:sor, Jeni Tennison |
Re: [xsl] call-template and execute, David Carlisle | Date | [xsl] XML file not able to view on , tanska |
Month |