|
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 |