Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries [Thread Prev] >Thread Next - Re: Using XSLT to transform XHTML to XHTML (again!) Using XSLT to transform XHTML to XHTML (again!)To: NULL Date: 7/4/2008 8:44:00 AM Dear Newsgroup I have an input XHTML document containing multiple topics. It contains topic names in h1 tags followed by content elements at the same level, and I want the transform to be able to select a single topic as specified by a parameter and output the topic as valid XHTML. I'm OK with the parameter but I cannot figure out how to get just the topic I want. Here is the input: ------- input2.xhtml -------- <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Fruits</title> </head> <body> <h1>Apples</h1> <p>Round fruits that grow on trees.</p> <p>They taste OK.</p> <h1>Bananas</h1> <p>Yellow fruits that grow in clumps.</p> <p>They taste nice as a smoothie.</p> <h1>Turnips</h1> <p>Warty vegetable, OK if roasted.</p> </body> </html> ------- input2.xhtml -------- ------- transform2.xslt --------- <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml xsl"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <xsl:param name="title"/> <xsl:variable name="first">4</xsl:variable> <xsl:variable name="last">6</xsl:variable> <xsl:template match="/"> <html> <head> <title> <xsl:value-of select="$title"/> </title> </head> <body> <xsl:for-each select="xhtml:html//xhtml:h1|xhtml:html//xhtml:p"> <xsl:if test="position() >= $first and position() <= $last"> <xsl:copy-of select="."></xsl:copy-of> </xsl:if> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet> ------- transform2.xslt --------- ---- wanted-output.xhtml ----- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Bananas</title> </head> <body> <h1>Bananas</h1> <p>Yellow fruits that grow in clumps.</p> <p>They taste nice as a smoothie.</p> </body> </html> ---- wanted-output.xhtml ----- In this case I pass in "Bananas" as the 'title' parameter and I want my output to be just the topic associated with Bananas (eg the position() between 4 and 6). But the only way I can make it work is by hard-wiring the 'first' and 'last' position values which is not useful :) In my transform I want something like: <xsl:variable name="first" select="position-of(text()=$title)"/> <xsl:variable name="last" select="position-of(text()=$title) and position() > $first"/> But somehow I don't think that will work :) Any pointers would be welcome. Kind regards, Will Rayer | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
