Jag har följande xml-struktur som kan vara godtyckligt djup. Din kod gör ungefär så här:Varför funkar inte mitt rekursiva anrop till en xsl-mall?
<?xml version="1.0" encoding="utf-8"?>
<classifications>
<level>
<levelName>Produkter</levelName>
<claClaID>831</claClaID>
<overClaClaID></overClaClaID>
<subLevels>
<level>
<levelName>1. Allmänt</levelName>
<claClaID>832</claClaID>
<overClaClaID>831</overClaClaID>
<subLevels>
<level>
<levelName>a. Sortimentöversikt</levelName>
<claClaID>857</claClaID>
<overClaClaID>832</overClaClaID>
<subLevels/>
</level>
</subLevels>
</level>
</subLevels>
</level>
<level>
<levelName>9.9 Övriga produkter</levelName>
<claClaID>847</claClaID>
<overClaClaID>831</overClaClaID>
<subLevels>
<level>
<levelName>a. CM 2 Nm - minimotor (OEM)</levelName>
<claClaID>850</claClaID>
<overClaClaID>847</overClaClaID>
<subLevels/>
</level>
</subLevels>
</level>
</classifications>
sedan skulle jag vilja skriva ut den med följande xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="classifications">
<xsl:call-template name="parseNode"></xsl:call-template>
</xsl:template>
<xsl:template name="parseNode">
<xsl:for-each select="level">
<a>
<xsl:attribute name="href">/?page_id=11&claClaID=<xsl:value-of select="claClaID" /></xsl:attribute>
<xsl:attribute name="target"><xsl:value-of select="vidareTarget" /></xsl:attribute>
<xsl:value-of select="levelName"/>
</a><br/>
<xsl:for-each select="../subLevels/level">
<xsl:call-template name="parseNode"></xsl:call-template>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
men allt jag får är den första
Sv: Varför funkar inte mitt rekursiva anrop till en xsl-mall?
function parseNode(ICollection<level> node)
{
foreach(level nodelevel in node)
{
printnode(nodelevel)
foreach(level parentlevel in nodelevel.parent.sublevels) // varför kolla på parent?
{
parseNode(parentlevel) // parseNode() förväntar sig en nod och inte en level, så det här lär inte funka
}
}
}
Ett sätt att få det att funka är att se till så den inre for-each byter context till "subLevels" och sedan anropar parseNode igen.
d.v.s.
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="classifications">
<xsl:call-template name="parseNode"></xsl:call-template>
</xsl:template>
<xsl:template name="parseNode">
<xsl:for-each select="level">
<a>
<xsl:attribute name="href">/?page_id=11&claClaID=<xsl:value-of select="claClaID" /></xsl:attribute>
<xsl:attribute name="target"><xsl:value-of select="vidareTarget" /></xsl:attribute>
<xsl:value-of select="levelName"/>
</a><br/>
<xsl:for-each select="subLevels">
<xsl:call-template name="parseNode"></xsl:call-template>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>