RE: [xsl] Returning HTML tags from a function not working

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