Subject: RE: [xsl] Returning HTML tags from a function not working From: Agnisys <agnisys@xxxxxxxxx> Date: Fri, 27 Jan 2006 06:53:20 -0800 (PST) |
I changed return type to "node()*" but in the output HTML I don't see any <br /> tags. So my function looks like this: <xsl:function name="xrsl:printdoc" as="node()*> <xsl:param name="docnode" as="element()*"/> <xsl:if test="$docnode[1]"> <xsl:analyze-string select="$docnode[1]" regex="\n"> <xsl:matching-substring><br /></xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="normalize-space(.)"/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:if> </xsl:function> In addition I noticed that if the input has HTML tags, they are being stripped out. What I want is to copy the "doc" node verbatim but replace new lines with <br /> and normalise spaces. So if the doc node has <b> </b> then they should be copied to the output as it is. Thanks, Anupam. --- Michael Kay <mike@xxxxxxxxxxxx> wrote: > You've specified the result of the function as xs:string. This means that > any elements in the result get atomized, and when you atomize an empty <br/> > element you get nothing (well, you get an empty string, which amounts to the > same thing...). Declare the result as node()* and all should be well. > > My own style would be to use a template for this rather than a function. > It's not mandatory, but I think people expect when they see a call-template > that nodes will be constructed, and they don't expect that when the see a > function call. > > Michael Kay > http://www.saxonica.com/ > > > -----Original Message----- > > From: Agnisys [mailto:agnisys@xxxxxxxxx] > > Sent: 26 January 2006 22:01 > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] Returning HTML tags from a function not working > > > > Hi, > > I'm using Saxson XSLT 2.0 on a Linux system. > > > > Input looks like this: > > > > <doc> > > Some text that can be > > Multiline. It can also have lots of spaces. > > </doc> > > > > The Output of XSL is set to HTML. > > > > I need the output to retain the newlines but retain the spaces. > > > > So I want the HTML to look like: > > ----------------------------------------------- > > Some text that can be > > Multiline. It can also have lots of spaces. > > ----------------------------------------------- > > > > Here is my function, but somehow the <br /> vanishes from the > > HTML and so I get one line only. > > <xsl:function name="xrsl:printdoc" as="xs:string*"> > > <xsl:param name="docnode" as="element()?"/> > > <xsl:if test="$docnode[1]"> > > <xsl:analyze-string select="$docnode[1]" regex="\n"> > > <xsl:matching-substring><br /></xsl:matching-substring> > > <xsl:non-matching-substring> > > <xsl:value-of select="normalize-space(.)"/> > > </xsl:non-matching-substring> > > </xsl:analyze-string> > > </xsl:if> > > </xsl:function> > > > > Please help! > > Thanks, > > Anupam. > > > > > > > > __________________________________________________ > > Do You Yahoo!? > > Tired of spam? Yahoo! Mail has the best spam protection around > > http://mail.yahoo.com > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Returning HTML tags from , Michael Kay | Thread | Re: [xsl] Returning HTML tags from , David Carlisle |
Re: [xsl] filepath of the xml file , Mukul Gandhi | Date | Re: [xsl] Returning HTML tags from , David Carlisle |
Month |