ik heb de volgende xml data:
hiermee output ik de hierarchische tree met de volgende xsl syntax:
Dit gaat allemaal prima zolang er een topcategorie in de data zit, maar wat zodra ik een subset van de data hierarchisch wil uitprinten? Waar dus geen categorie in zit zonder parent (ie, waar parentid = 0)
Ik moet dus een xpath query bedenken die zegt: select een categorie, waar de parentid niet als id in de lijst voorkomt...
Heb van alles geprobeerd (oa category[not(../category/id=current()/parentcategoryid)]) maar tot nu toe zonder succes...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <categories>
<category>
<id>1</id>
<name>cat1</name>
<parentid>0</parentid>
</category>
<category>
<id>2</id>
<name>cat2</name>
<parentid>1</parentid>
</category>
<category>
<id>3</id>
<name>cat3</name>
<parentid>0</parentid>
</category>
<category>
<id>4</id>
<name>cat4</name>
<parentid>3</parentid>
</category>
<category>
<id>5</id>
<name>cat5</name>
<parentid>4</parentid>
</category>
</categories |
hiermee output ik de hierarchische tree met de volgende xsl syntax:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| <xsl:template match="categories">
<table>
<tr>
<td>
<ul><xsl:apply-templates select="category[parentcategoryid=0]"/></ul>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="category">
<xsl:choose>
<xsl:when test="../category[parentcategoryid=current()/id]">
<xsl:apply-templates select="current()" mode="isaparent"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current()" mode="isnoparent"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="category" mode="isaparent">
<li>
<xsl:value-of select="name"/><span> [</span><a href="category.asp?action=show&what=category&key={id}">view</a><span>/</span><a href="category.asp?action=edit&what=category&key={id}">edit</a><span>/</span><a href="category.asp?action=delete&what=category&key={id}">delete</a><span>]</span>
<ul><xsl:apply-templates select="../category[parentcategoryid=current()/id]"/></ul>
</li>
</xsl:template>
<xsl:template match="category" mode="isnoparent">
<li>
<xsl:value-of select="name"/><span> [</span><a href="category.asp?action=show&what=category&key={id}">view</a><span>/</span><a href="category.asp?action=edit&what=category&key={id}">edit</a><span>/</span><a href="category.asp?action=delete&what=category&key={id}">delete</a><span>]</span>
</li>
</xsl:template> |
Dit gaat allemaal prima zolang er een topcategorie in de data zit, maar wat zodra ik een subset van de data hierarchisch wil uitprinten? Waar dus geen categorie in zit zonder parent (ie, waar parentid = 0)
Ik moet dus een xpath query bedenken die zegt: select een categorie, waar de parentid niet als id in de lijst voorkomt...
Heb van alles geprobeerd (oa category[not(../category/id=current()/parentcategoryid)]) maar tot nu toe zonder succes...