|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Dmoz xml structure sort
Hi,
I think you are on the right track, but I would suggest changing your schema a bit. I would organize your topics hierarchically and have a unique ID and a name (names are more likely to have duplicates) attribute, like: <topic id="t123" name="Base">
<Title local="en-US">Home</Title>
<topic id="t234" name="General_Information">
<topic id="t345" name="About_us"> </
<topic id="t346" name="Contact_us"></ </ </ With this structure you will be able to many more things than you have probably thought of at this point and you do not need to list the //narrow elements because they are now there. This means you can move things around and you wont' have to edit your topics config. Now, on to some XSL: First thing to do is create a top level key: <xsl:key name="topics" match="topic" use="@id"/> Then I usually pass the 'focus' id into the transformation as a parameter, so if you can do that you can get your focus topic in a top level variable: <xsl:variable
name="focus_topic"
select="key('topics', $focus_topic_id)"/><xsl:variable
name="focus_parent"
select="key('topics', $focus_parent_id)"/>Then you can use this variable throughout your transformation to find your topic context. You can ensure you always have valid links by first going to the linked topic nodeset and then traveling up and down the topic hierarchy to find the path. Say you want to create a nav thingy - you can do it like so: <xsl:template match="/">
<html>
<xsl:call-template name="head"/>
<body>
<div id="pageBody">
<xsl:call-template name="banner"/><div id="navColumn"> <xsl:apply-templates
select="$focus_parent/*"
mode="navigation"/></div> <div id="contentWrapper">
<xsl:appl
<xsl:call-template name="footer"/>
</div>
</body>
</html>
</xsl:template>
<xsl:variable name="href">
<xsl:call-template name="topic_path_builder"/>
</ <xsl:choose>
<xsl:when test="not(@id=$focus_topic_id)">
<div>
<a href="{$href}">
<xsl:value-of select="@label"/>
</a>
</div>
</
<xsl:otherwise>
<div class="selected">
<a href="{$href}">
<xsl:value-of select="@label"/>
</a>
</div>
</
</
</<xsl:template name="topic_path_builder"> <xsl:call-template name="ancestor_path"/> <xsl:text>/</xsl:text> <xsl:value-of select="@name"/> </xsl:template> <!-- root relative paths, you could do document relative paths too--> <xsl:template name="ancestor_path">
<xsl:for-each select="ancestor::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="@name"/>
</xsl:for-each>
</xsl:template>make sense? best, -Rob John Hamman wrote: Hi all. I have a navigational site tree xml page similar to Dmoz.org. And its made up like this below. I am new to xpath and am having problems finding a solution to this.
|
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
|

Cart








