This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


--- "Lars Nyman" <larsnyman at 14designs dot com> wrote:
 
> 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?
> 
> 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>


Hi Lars,

It seems you're right. The same stylesheet (with just the ext.
namespace set to that of Saxon) when applied with Saxon, produces the
following result:


      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




=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]