xsl-list
[Top] [All Lists]

RE: behavior of xsl:value-of with empty string

2002-10-01 08:55:49
The XSLT spec says that the xsl:value-of element creates a 
text node in the result tree, but if the string is empty, no 
text node should be created.  I have a situation where a rtf 
is initially bound to a variable, then converted to a nodeset 
using an extension function and I am, thus, able to detect 
the processor's (lack of) adherence to this rule.  And I 
believe msxml may not be following the spec.  Can someone, 
please, confirm my suspicion or correct my misunderstanding?

The specification of msxsl:node-set() is entirely under Microsoft's
control.

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 


If I run the stylesheet below, I get the following output:

test id=1: count(child::node())=1, expected 0
test id=2: count(child::node())=0, expected 0
test id=3: count(child::node())=3, expected 1
test id=4: count(child::node())=2, expected 1
test id=5: count(child::node())=2, expected 1
test id=6: count(child::node())=1, expected 1
test id=7: count(child::node())=1, expected 1
test id=8: count(child::node())=1, expected 1
test id=9: count(child::node())=3, expected 2

whereas I had expected to get:

test id=1: count(child::node())=0, expected 0
test id=2: count(child::node())=0, expected 0
test id=3: count(child::node())=1, expected 1
test id=4: count(child::node())=1, expected 1
test id=5: count(child::node())=1, expected 1
test id=6: count(child::node())=1, expected 1
test id=7: count(child::node())=1, expected 1
test id=8: count(child::node())=1, expected 1
test id=9: count(child::node())=2, expected 2

Lars


<?xml version="1.0"?>
<xsl:transform version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
   xmlns:msxsl="urn:schemas-microsoft-com:xslt"
   exclude-result-prefixes="msxsl">

<xsl:template match="/">
   <xsl:variable name="tests-rtf">
      <tests>
         <test id="1" children="0"><xsl:value-of select="''"/></test>
         <test id="2" children="0"><xsl:value-of 
select="''"/><xsl:value-of select="''"/></test>
         <test id="3" children="1"><xsl:value-of 
select="''"/><element/><xsl:value-of select="''"/></test>

         <test id="4" children="1"><xsl:value-of 
select="''"/><xsl:value-of 
select="''"/><element/><xsl:value-of select="''"/></test>
         <test id="5" children="1"><xsl:value-of 
select="''"/><element/><xsl:value-of 
select="''"/><xsl:value-of select="''"/></test>
         <test id="6" children="1"><xsl:value-of 
select="''"/><xsl:value-of 
select="''"/><element/><xsl:value-of 
select="''"/><xsl:value-of select="''"/></test>

         <test id="7" children="1"><xsl:value-of 
select="'1'"/><xsl:value-of select="''"/></test>
         <test id="8" children="1"><xsl:value-of 
select="'1'"/><xsl:value-of select="''"/><xsl:value-of 
select="''"/></test>
         <test id="9" children="2"><xsl:value-of 
select="'1'"/><xsl:value-of 
select="''"/><element/><xsl:value-of select="''"/></test>
      </tests>
   </xsl:variable>

   <xsl:for-each select="msxsl:node-set($tests-rtf)/tests/test">
      test id=<xsl:value-of select="@id"/>: 
count(child::node())=<xsl:value-of 
select="count(child::node())"/>, expected <xsl:value-of 
select="@children"/><br/>
   </xsl:for-each>
</xsl:template>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>