Re: XSL:VALUE-OF

Michael Ludwig <[email protected]>
Newsgroups gmane.text.xml.xalan.java.user
Message-ID <[email protected]>
mahati schrieb:
> i could see that only + gets printed but not href tag around it.

Typically, that means you're using <xsl:value-of> instead of
<xsl:copy-of>. In your case, the reason seems to be different.

> <xsl:call-template name=columnHeader">
> <xsl:with-param name="value">
> 				
> 	<xsl:attribute name="id">frameloader</xsl:attribute>
> 	<xsl:attribute name="href">javascript:void(0);</xsl:attribute>
> 	<xsl:attribute name="onclick">javascript:<xsl:value-of
> select="$gridName"/>.expandAllTreeRows(this);</xsl:attribute>
>    				+
> </xsl:with-param>
> </xsl:template>

This differs from your original example. You're missing the <a> element.
(Maybe it got eaten in the mail processing chain.) Xalan-J 2.7.1 and
LibXSLT 1.1.24 both ignore this attribute. Saxon 6.5 issues a warning:

   Cannot write an attribute node when no element start tag is open

I suggest you adjust your code.

By the way, if you pass the parameter as you intend it to appear in the
output, spare yourself the hassle of exsl:node-set() plus identity
transform and use <xsl:copy-of> as in the following example.

In addition, use literal XML for the parameter instead of constructing
it using <xsl:attribute>. That's much more readable. Use the latter
method only if dynamic computation of the attribute name is required.

Michael Ludwig

<xsl:stylesheet version="1.0"
  xmlns:exsl="http://exslt.org/common"
  extension-element-prefixes="exsl"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output indent="yes"/>

  <xsl:template match="/">
   <xsl:call-template name="x">
    <xsl:with-param name="y">
     <eins><zwei/><drei>vier</drei></eins>
     <!-- The following does not work: -->
     <!-- <xsl:attribute name="z">moin</xsl:attribute> --><!-- Saxon 6.5:
     Cannot write an attribute node when no element start tag is open -->
    </xsl:with-param>
   </xsl:call-template>
  </xsl:template>

  <xsl:template name="x">
   <xsl:param name="y"/>
   <Urmel>
    <good><xsl:copy-of select="$y"/></good><!-- good and simple -->
    <hassle><!-- unnecessary hassle -->
     <xsl:apply-templates select="exsl:node-set($y)/*"/>
    </hassle>
    <attr><xsl:apply-templates select="exsl:node-set($y)//@*"/></attr>
   </Urmel>
  </xsl:template>

  <xsl:template match="@*|node()"><!-- identity template -->
   <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
  </xsl:template>

</xsl:stylesheet>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.