Subject: Re: In-order traversal of XHTML of text() and <foo> nodes?
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Fri, 28 Mar 2003 16:13:30 +0000
|
Hi Gan,
> Say I have XML like this...
>
> <foobar>
> Once <foo>upon</foo> a midnight <bar>dreary</bar> while I...
> </foobar>
>
> How do I make a traversal of that <foobar> node, picking up text(),
> <foo> and <bar> in document order, so as to pass through the text()
> but apply separate templates to <foo> and <bar>?
XSLT is designed to make this kind of transformation easy. Use the
<xsl:apply-templates> instruction to say "process the children of this
node" and the <xsl:template> element to say "when you find an element
X do Y":
<xsl:template match="foobar">
<p><xsl:apply-templates /></p>
</xsl:template>
<xsl:template match="foo">
<b><xsl:apply-templates /></b>
</xsl:template>
<xsl:template match="bar">
<i><xsl:apply-templates /></i>
</xsl:template>
In this example, the text nodes are processed by a built-in template
that looks like:
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|