If the XML fragment is the input, the data type is "node set". If you
use string() on a node set as in your example template, the result will
be the concatenation of all descendant text nodes (in your case only "
kkkk"). Hmm, now it's difficult to guess, what you really want. Not a
node set, but a string "<test>...</test>"? But why? You can't "operate"
on a string. But if you really want:
<xsl:template match="*">
<xsl:text/><<xsl:value-of select="name()">
<xsl:apply-templates select="@*"/>
<xsl:text>></xsl:text>
<xsl:apply-templates select="node()"/>
</<xsl:value-of select="name()">>
</xsl:template>
<xsl:template match="@*">
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>="</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:template>
You can add further templates e.g. for comments and so on. If you only
want a HTML view like IE offers, have a look at
http://cvs.apache.org/viewcvs.cgi/xml-cocoon2/src/webapp/samples/common/style/xsl/html/simple-xml2html.xsl.
Regards,
Joerg
Fengrui Gu wrote:
Suppose I have a result tree like
<test>
<test1> kkkk</tes1>
<test2 attr="kkkk"/>
</test>
Can I store it in a string variable like
<xsl:template match="test>
<xsl:variable name="str" select="string(.)"/>
</xsl:template>
So whenever I use <xsl:value-of select="$str"/>, it will output
the whole result tree as string.
Obvioulsy, the code doesn't work because string function only converts
the first element.
any ideas?
thanks,
Fengrui
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list