[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Unexpected sort order on a multi sort
> I am sure I am missing an obvious one here, Yep. xsl:sort data-type="number". Michael Kay but I am getting > unexpected output, based on the sort order. I stripped my > XML down to the bare minimum here for an example. > > Output > SUBJECTS, Exp Var.Pos 172, Exp Var.Pos 202, Exp Var.Pos 236, > Exp Var.Pos 316, Exp Var.Pos 68 PA126746586, C/G, C/C, G/A, T/T, G/G > > Expected the last variant to be the first based on sorting, > since <position> element is a number, shouldn't it be 68, > 172, 202, 236, 316? > > Do I have a strange typo? I added the number() function as a > last stab, but I was getting the same results without it? > What did I miss! > > > Short XML DOC > <?xml version="1.0" encoding="UTF-8"?> > <pharmgkb xmlns="http://www.pharmgkb.org/schema/" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.pharmgkb.org/schema/ > http://www.pharmgkb.org/schema/root.xsd"> > <gene pharmgkbId="PA117"> > <referenceSequence> > > <dnaSequence>ccagTAAGCGCCCTCCTAATCCCCGCAGCGCCACC</dnaSequence> > <experiment> > <sampleSetXref > resource="PharmGKB">PA128747821</sampleSetXref> > <genotypesInSubject> > <subjectXref > resource="PharmGKB">PA126746586</subjectXref> > <pcrResult> > <assayXref > resource="local">21</assayXref> > > <sequencedBothStrands>true</sequencedBothStrands> > <variant> > > <position>202</position> > > <firstAllele>C</firstAllele> > > <secondAllele>C</secondAllele> > </variant> > <variant> > > <position>68</position> > > <firstAllele>G</firstAllele> > > <secondAllele>G</secondAllele> > </variant> > <variant> > > <position>172</position> > > <firstAllele>C</firstAllele> > > <secondAllele>G</secondAllele> > </variant> > <variant> > > <position>236</position> > > <firstAllele>G</firstAllele> > > <secondAllele>A</secondAllele> > </variant> > <variant> > > <position>316</position> > > <firstAllele>T</firstAllele> > > <secondAllele>T</secondAllele> > </variant> > </pcrResult> > </genotypesInSubject> > </experiment> > </referenceSequence> > </gene> > </pharmgkb> > > XSL > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:n1="http://www.pharmgkb.org/schema/" > xmlns:sch="http://www.ascc.net/xml/schematron" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <xsl:output method="text" indent="yes"/> > <!--index all the subject elements in doc by value of > subjectXref--> > <xsl:key name="subject-key" match="//n1:subjectXref" use="."/> > <xsl:template match="/"> > <!--get unique subjects --> > <xsl:variable name="unique-subjects" > select="//n1:subjectXref[generate-id(.)=generate-id(key('subje > ct-key', .))]"/> > <!--loop on unique subjects--> > <xsl:for-each select="$unique-subjects"> > <!--sort the subjects --> > <xsl:sort select="."/> > <xsl:if test="position()=1" > > <xsl:call-template > name="procSubjectHeader"/> > </xsl:if> > <xsl:call-template name="procSubject"/> > </xsl:for-each> > </xsl:template> > > <xsl:template name="procSubjectHeader"> > <xsl:variable name="subjectID" select="."/> > <!--Column name for the subjects --> > <xsl:text>SUBJECTS</xsl:text> > <!--get list of all variants for the subject --> > <xsl:variable name="subject-variants" > select="//n1:variant[../../n1:subjectXref=$subjectID]"/> > <xsl:for-each select="$subject-variants"> > <!--Sort on all variants on experiment--> > <xsl:sort select="../../.."/> > <!--Sort on all variant position--> > <xsl:sort select="number(n1:position)"/> > <xsl:call-template name="procVariantHeader"/> > </xsl:for-each> > <!-- Output carriage return after all subject > variants are printed--> > <xsl:text>
</xsl:text> > </xsl:template> > > <xsl:template name="procSubject"> > <xsl:variable name="subjectID" select="."/> > <xsl:value-of select="$subjectID"/> > <!--get list of all variants for the subject --> > <xsl:variable name="subject-variants" > select="//n1:variant[../../n1:subjectXref=$subjectID]"/> > <xsl:for-each select="$subject-variants"> > <!--Sort on all variants on experiment--> > <xsl:sort select="../../.."/> > <!--Sort on all variant position--> > <xsl:sort select="n1:position"/> > <xsl:call-template name="procVariant"> > <!--xsl:with-param > name="variant" select="."/--> > </xsl:call-template> > </xsl:for-each> > <!-- Output carriage return after all subject > variants are printed--> > <xsl:text>
</xsl:text> > </xsl:template> > > <xsl:template name="procVariantHeader"> > <xsl:text>, Exp Var.Pos </xsl:text> > <xsl:value-of select="n1:position"/> > </xsl:template> > > <xsl:template name="procVariant"> > <xsl:value-of select="concat(', > ',n1:firstAllele,'/',n1:secondAllele)"/> > </xsl:template> > > </xsl:stylesheet> > > > Thanks, > > -mat > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|