[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] what are node set fragments and why are they ruining my life
see the minimal xsl and xml file below. first off, nothing i've read in the spec or the various xsl tutorials make any sense in defining what a node set fragment is. they talk about things like "not being well-formed", but (a) i'm not clear how one is able to produce something that isn't well-formed, and (b) that doesn't match experience as this example shows. here i've shown where the mere act of passing a node set (fragment) through a call-template is enough to defile it. here are the various outputs. 1. comment out first for-each, use xt output is: member 1 note that there is a result, but no xsl:message instructions are run 2. comment out first for-each, use saxon output is: member local-name=member, id=1 member local-name=member, id=2 note that there is no result, but the xsl:message instructions are run 3. leave in first for-each, use xt output is: cannot convert to node-set 4. leave in first for-each, use saxon member local-name=member, id=1 member local-name=member, id=2 Error during source document processing At xsl:for-each on line 32 of file:/d:/mda/projects/xmlhacks/xmlidl/test1.xsl: Cannot convert value [** RESULT TREE FRAGMENT **] to a node-set Thanks to anyone who can elucide this matter. -mda test1.xml <root> <member id="1">member 1</member> <member id="2">member 2</member> </root> test1.xsl <?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://www.jclark.com/xt/java/java.util.Date" xmlns:xt="http://www.jclark.com/xt" xmlns:sxf="/com.icl.saxon.functions.Extensions" extension-element-prefixes="date xt sxf" exclude-result-prefixes="date sxf xt" > <xsl:output method="html" indent="yes" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN" /> <xsl:strip-space elements="*"/> <xsl:template match="root"> <xsl:variable name="members"> <xsl:call-template name="get_members"/> </xsl:variable> <!-- why can't i use a variable? something about result tree fragments... --> <!-- comment this for-each out to avoid the runtime error <xsl:for-each select="$members"> <xsl:message>member local-name=<xsl:value-of select="local-name(.)"/>, id=<xsl:value-of select="@id"/></xsl:message> </xsl:for-each> --> <xsl:value-of select="$members"/> </xsl:template> <xsl:template name="get_members"> <xsl:variable name="result" select="*"/> <xsl:for-each select="$result"> <xsl:message>member local-name=<xsl:value-of select="local-name(.)"/>, id=<xsl:value-of select="@id"/></xsl:message> </xsl:for-each> <!-- same thing as: <xsl:value-of select="$result"/> --> <xsl:value-of select="*"/> </xsl:template> </xsl:stylesheet> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|