Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations biv343 on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

XSL - check if child node exists

Status
Not open for further replies.

Kai77

Programmer
Jun 7, 2004
77
NL
I have the following XML document:

<?xml version="1.0" encoding="utf-8" ?>
- <navigation>
<chapterlevel_1 title="Homepage" level="1" id="1747" active="1" breadcrumbmember="1" />
<chapterlevel_1 title="Profiel" level="1" id="1749" active="0" breadcrumbmember="0" />
- <chapterlevel_1 title="Producten & diensten" level="1" id="1751" active="0" breadcrumbmember="0">
<chapterlevel_2 title="Web Development" level="2" id="1755" active="0" breadcrumbmember="0" />
<chapterlevel_2 title="E-mailmarketing" level="2" id="1756" active="0" breadcrumbmember="0" />
- <chapterlevel_2 title="Search Engine Optimalisatie" level="2" id="1757" active="0" breadcrumbmember="0">
<chapterlevel_3 title="test" level="3" id="1766" active="0" breadcrumbmember="0" />
</chapterlevel_2>
<chapterlevel_2 title="On-line Brand Management" level="2" id="1758" active="0" breadcrumbmember="0" />
<chapterlevel_2 title="Website Management" level="2" id="1759" active="0" breadcrumbmember="0" />
</chapterlevel_1>
<chapterlevel_1 title="Shocases" level="1" id="1752" active="0" breadcrumbmember="0" />
<chapterlevel_1 title="Nieuwsbrief" level="1" id="1753" active="0" breadcrumbmember="0" />
<chapterlevel_1 title="Contact" level="1" id="1754" active="0" breadcrumbmember="0" />
</navigation>

How can I use the "if" statement to see whether a chapterlevel_1 has childnodes (chapterlevel_2)?
 
Code:
<xsl:if test="chapterlevel_1/*">.....

Jon

"There are 10 types of people in the world... those who understand binary and those who don't.
 
or...

If you are looping through the nodes, and want to know if the current node has children...
Code:
<xsl:if test="./*">

Such as: (chapter.xsl)
Code:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="[URL unfurl="true"]http://www.w3.org/1999/XSL/Transform"[/URL] version="1.0">
  <xsl:variable name="tab">20</xsl:variable>
  <xsl:template match="/">
    <html>
      <body>
        <xsl:call-template name="recurse">
          <xsl:with-param name="tabs" select="0" />
          <xsl:with-param name="node" select="navigation" />
        </xsl:call-template>
      </body>
    </html>
  </xsl:template>

  <xsl:template name="recurse">
	  <xsl:param name="node"/>
	  <xsl:param name="tabs"/>
      <xsl:for-each select="$node/*">
	    <a STYLE="padding-left: {$tab * $tabs}"><xsl:value-of select="concat(@title,' (',@id,')')"/></a><br/>
		[b]<xsl:if test="./*">[/b]
          <xsl:call-template name="recurse">
            <xsl:with-param name="tabs" select="$tabs + 1" />
            <xsl:with-param name="node" select="." />
          </xsl:call-template>
		</xsl:if>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Then, you don't even need to use the level_x...
Code:
<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="chapter.xsl"?>
<navigation>
  <[b]chapter[/b] title="Homepage" level="1" id="1747" active="1" breadcrumbmember="1" /> 
  <[b]chapter[/b] title="Profiel" level="1" id="1749" active="0" breadcrumbmember="0" /> 
  <chapter title="Producten [b][COLOR=red]&amp;[/color][/b] diensten" level="1" id="1751" active="0" breadcrumbmember="0">
    <chapter title="Web Development" level="2" id="1755" active="0" breadcrumbmember="0" /> 
    <chapter title="E-mailmarketing" level="2" id="1756" active="0" breadcrumbmember="0" /> 
    <chapter title="Search Engine Optimalisatie" level="2" id="1757" active="0" breadcrumbmember="0">
      <chapter title="test" level="3" id="1766" active="0" breadcrumbmember="0" /> 
    </chapter>
    <chapter title="On-line Brand Management" level="2" id="1758" active="0" breadcrumbmember="0" /> 
    <chapter title="Website Management" level="2" id="1759" active="0" breadcrumbmember="0" /> 
  </chapter>
  <chapter title="Shocases" level="1" id="1752" active="0" breadcrumbmember="0" /> 
  <chapter title="Nieuwsbrief" level="1" id="1753" active="0" breadcrumbmember="0" /> 
  <chapter title="Contact" level="1" id="1754" active="0" breadcrumbmember="0" /> 
</navigation>

Either way should work...

Also, don't forget to use '&amp;' instead of '&'

Visit My Site
PROGRAMMER: (n) Red-eyed, mumbling mammal capable of conversing with inanimate objects.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top