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