This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
behavior of xsl:value-of with empty string
- From: "Lars Nyman" <larsnyman at 14designs dot com>
- To: <XSL-List at lists dot mulberrytech dot com>
- Date: Mon, 30 Sep 2002 13:33:13 -0700
- Subject: [xsl] behavior of xsl:value-of with empty string
- Organization: 14 Designs
- Reply-to: xsl-list at lists dot mulberrytech dot com
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>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list