Subject: RE: [xsl] Transforming an XML document where the content isn't in a special tag From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 17 Aug 2005 08:08:29 +0100 |
> It seems Saxon does'nt seem to handle hetrogeneous sequence > following-sibling::text()[1] | a properly (I might be wrong..) yes, you are wrong. Your code has at least three errors: <xsl:with-param name="nodelist" > select="following-sibling::text()[1] | a" /> (a) this selects only the first text node, there might be a text node before the <a> and another one after (b) it's looking for a elements that are children of <header> rather than siblings (c) it doesn't discriminate between nodes that come before the next header and nodes that come after. Please see the solutions I posted this morning. Michael Kay http://www.saxonica.com/ > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="2.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output method="html" indent="yes"/> > > <xsl:template match="/root"> > <html> > <head> > <title/> > </head> > <body> > <xsl:apply-templates select="header" /> > </body> > </html> > </xsl:template> > > <xsl:template match="header"> > <h1><xsl:value-of select="." /></h1> > <xsl:call-template name="printTextNode"> > <xsl:with-param name="nodelist" > select="following-sibling::text()[1] | a" /> > </xsl:call-template> > </xsl:template> > > <xsl:template name="printTextNode"> > <xsl:param name="nodelist" /> > <p> > <xsl:for-each select="$nodelist"> > <xsl:choose> > <xsl:when test="name() = 'a'"> > <xsl:copy-of select="." /> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="." /> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each> > </p> > </xsl:template> > > </xsl:stylesheet> > > Regards, > Mukul > > > On 8/17/05, Noam Raphael <noamraph@xxxxxxxxx> wrote: > > Hello, > > > > I'm very new to XSL, so please forgive me if this question > is stupid. > > > > I want to transform an XML document which looks like this: > > > > ===================== > > <header> > > First Section > > </header> > > This section deals with a lot of <a href="bla.htm">things</a>. > > One of them, is... > > > > <header> > > Second Section > > </header> > > Now, this section is different, becase... > > ===================== > > > > into this HTML: > > > > ===================== > > <h1>First Section</h1> > > <p>This section deals with a lot of <a href="bla.htm">things</a>. > > One of them, is...</p> > > <h1>Second Section</h1> > > <p>Now, this section is different, bacause...</p> > > ===================== > > > > I have a problem with adding the <p></p> tags. The problem is that > > their locations depends on the <header> tags. I can, of > course, add a > > </p> before a header and a <p> after it, but I'll get an > extra one at > > the beginning and at the end. Can I do this transformation with XSL? > > (If it matters, I used <xsl:for-each select="text() | *">) > > > > Thank you very much, > > Noam Raphael
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Transforming an XML docum, David Carlisle | Thread | RE: [xsl] Transforming an XML docum, Michael Kay |
Re: [xsl] Converting <xml> StyleShe, Jacquo Johnson | Date | RE: [xsl] Transforming an XML docum, Michael Kay |
Month |