Forum Moderators: open

Message Too Old, No Replies

XSL transform not what is expected

         

john_k

7:18 pm on Jul 20, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



I am hoping someone can point out something among these code snippets to help me out. Here is a piece of XML, the XSL that is being used to transform it, and the results that I am getting. The last snippet is what I would like to get.

XML ELEMENT



<Hatecrimes>
<HatecrimeIncident IncidentNr="1" IncidentType="D">
<CellData Key="f9r1c1">1hc</CellData>
<CellData Key="f9r1c3">2</CellData>
<CellData Key="f9r1c4">1</CellData>
<CellData Key="f9r1c5">1</CellData>
<Offender ChildNr="1">
<CellData Key="f9r1offender2c6">27</CellData>
<CellData Key="f9r1offender2c7">M</CellData>
</Offender>
<Offense ChildNr="2">
<CellData Key="f9r1offense1c10">1</CellData>
<CellData Key="f9r1offense1c6">03</CellData>
<CellData Key="f9r1offense1c7">1</CellData>
<CellData Key="f9r1offense1c8">01</CellData>
<CellData Key="f9r1offense1c9">12</CellData>
</Offense>
</HatecrimeIncident>
</Hatecrimes>

XSL



<xsl:choose>
<xsl:when test="count(Hatecrimes/HatecrimeIncident) &gt; -1">
<xsl:element name="script">
function buildHatecrimeTables()
{
<xsl:for-each select="Hatecrimes/HatecrimeIncident">
<xsl:variable name="incNr"><xsl:value-of select="position()"/></xsl:variable>
<xsl:variable name="prefix">f9r<xsl:value-of select="$incNr"/></xsl:variable>
showHatecrimeIncident('<xsl:value-of select="CellData[@Key=concat($prefix,'c1')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'c2')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'c3')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'c4')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'c5')]"/>');
<xsl:for-each select="Offense">
<xsl:sort data-type="number" order="ascending" select="@ChildNr"/>
showOffense(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="CellData[@Key=concat($prefix,'offense',position(),'c6')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'offense',position(),'c7')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'offense',position(),'c8')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'offense',position(),'c9')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'offense',position(),'c10')]"/>');
testOffense(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="concat($prefix,'offense',position(),'c6')"/>','<xsl:value-of select="concat($prefix,'offense',position(),'c7')"/>','<xsl:value-of select="concat($prefix,'offense',position(),'c8')"/>','<xsl:value-of select="concat($prefix,'offense',position(),'c9')"/>','<xsl:value-of select="concat($prefix,'offense',position(),'c10')"/>');
</xsl:for-each>
<xsl:for-each select="Offender">
<xsl:sort data-type="number" order="ascending" select="@ChildNr"/>
showOffender(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="CellData[@Key=(concat($prefix,'offender',position(),'c6'))]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'offender',position(),'c7')]"/>');
testOffender(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="concat($prefix,'offender',position(),'c6')"/>','<xsl:value-of select="concat($prefix,'offender',position(),'c7')"/>');
</xsl:for-each>
<xsl:for-each select="Victim">
<xsl:sort data-type="number" order="ascending" select="@ChildNr"/>
showVictim(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="CellData[@Key=concat($prefix,'victim',position(),'c6')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'victim',position(),'c7')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'victim',position(),'c8')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'victim',position(),'c9')]"/>','<xsl:value-of select="CellData[@Key=concat($prefix,'victim',position(),'c10')]"/>');
testVictim(<xsl:value-of select="$incNr"/>,'<xsl:value-of select="concat($prefix,'victim',position(),'c6')"/>','<xsl:value-of select="concat($prefix,'victim',position(),'c7')"/>','<xsl:value-of select="concat($prefix,'victim',position(),'c8')"/>','<xsl:value-of select="concat($prefix,'victim',position(),'c9')"/>','<xsl:value-of select="concat($prefix,'victim',position(),'c10')"/>');
</xsl:for-each>
</xsl:for-each>
}
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="script">
function buildHatecrimeTables(){return;}
</xsl:element>
</xsl:otherwise>
</xsl:choose>

JAVASCRIPT THAT I GET FROM THE ABOVE XML & XSL



function buildHatecrimeTables()
{
showHatecrimeIncident('1hc','','2','1','1');

showOffense(1,'','','','','1');
testOffense(1,'f9r1offense1c6','f9r1offense1c7','f9r1offense1c8','f9r1offense1c9','f9r1offense1c10');

showOffender(1,'','M');
testOffender(1,'f9r1offender1c6','f9r1offender1c7');
}

JAVASCRIPT THAT I THINK I SHOULD GET



function buildHatecrimeTables()
{
showHatecrimeIncident('1hc','','2','1','1');

showOffense(1,'03','1','01','12','1');
testOffense(1,'f9r1offense1c6','f9r1offense1c7','f9r1offense1c8','f9r1offense1c9','f9r1offense1c10');

showOffender(1,'27','M');
testOffender(1,'f9r1offender1c6','f9r1offender1c7');
}

btw - the testOffense, testOffender, and testVictim functions are just to make sure the concatenation was working as expected.

Does anyone know why the javascript that results in snippet 3 is not picking up all of the cellData elements?

Thanks.

john_k

2:16 pm on Jul 21, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Please disregard - I have realized that the numbering in the Key attribute is not aligned with the for-each counting logic.