|
Subject: Re: [xsl] built in templates question From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Fri, 16 Aug 2002 12:39:28 +0100 |
Hi Brian,
Note that in:
> <heading2>
> Course Information
> <sub resource="Geo101_readings.doc">Reading
> List</sub>
> <sub
> resource="Geo101_syllabus2.doc">Syllabus</sub>
> <sub resource="Geo101_schedule.doc">Schedule</sub>
> </heading2>
for example, the heading2 element contains a text node with the
(normalised) value "Course Information" and three child sub elements
that have their own text nodes.
When you get the string value of a node, for example by doing:
<xsl:value-of select="." />
you get a string that's made by concatenating all the text node
*descendants* of the node (not only the children). For example, the
string value of the heading2 element above is (ignoring whitespace
issues):
"Course Information Reading List Syllabus Schedule"
You're not interested in that string value; instead, you want the
value of the text node child of the node, so you want:
<xsl:value-of select="text()" />
[If you can, I'd advise you change your XML so that, aside from
elements that have to contain mixed content because they contain
documentation, all your elements either contain *only* other elements
or *only* text. For example, use:
<heading2>
<title>Course Information</title>
<sub resource="Geo101_readings.doc">Reading List</sub>
<sub resource="Geo101_syllabus2.doc">Syllabus</sub>
<sub resource="Geo101_schedule.doc">Schedule</sub>
</heading2>
instead. That way you can use:
<xsl:value-of select="title" />
and it's a lot clearer what piece of information you're pulling out.]
So your templates need to look like:
<xsl:template match="heading2">
<xsl:choose>
<xsl:when test = "@resource">
<a href="{@resource}">
<xsl:value-of select="text()"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="text()"/><br/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="heading3"/>
<xsl:apply-templates select="sub"/>
</xsl:template>
> Also, I would like to be able to present the output in the form of a
> navigation menu where the sub elements could be contained in a
> folder, which would open when clicked on, which I assume would
> involve using javascript. I haven't used js before so any advice on
> how I should approach this would also be appreciated.
Others might be able to give you more specific guidance, but a quick
Google search shows a proliferation of JavaScript navigation menus
available at http://www.sitenavigation.net/. Just bear in mind that
your XSLT will be constructing the JavaScript, which is just text as
far as it is concerned -- I recommend you create the HTML page with
JavaScript inside it first, and then work out how to create XSLT to
create that HTML page from your XML.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] built in templates question, Brian Hickey | Thread | [xsl] does an element have a unique, Thomas Sandor |
| [xsl] does an element have a unique, Thomas Sandor | Date | Re: [xsl] does an element have a un, Jeni Tennison |
| Month |