This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Normalize-space does not work for node generated from msxml:node-set function
- From: "Macaulay,Malcolm (US)" <Malcolm dot Macaulay2 at cnare dot com>
- To: <xsl-list at lists dot mulberrytech dot com>, "Gennady Loskutov" <g_loskutov at myrealbox dot com>, <jeni at jenitennison dot com>
- Date: Mon, 18 Mar 2002 18:15:10 -0600
- Subject: [xsl] Normalize-space does not work for node generated from msxml:node-set function
- Reply-to: xsl-list at lists dot mulberrytech dot com
Thanks Jeni and Gennady for the help below. That works, however I still get a strange behaviour from the node-set function:
my XML:
<?xml version="1.0" encoding="UTF-8"?>
<XMLData>
<ANode>
<ChildNode>A</ChildNode>
<ChildNode>B</ChildNode>
<ChildNode>C</ChildNode>
</ANode>
</XMLData>
My XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:variable name="XSLData">
<ANode>
<ChildNode>A</ChildNode>
<ChildNode>B</ChildNode>
<ChildNode>C</ChildNode>
</ANode>
</xsl:variable>
<xsl:template match="/">
<p>Normalised text from node-set function - spaces not preserved</p>
<xsl:value-of select="normalize-space(msxsl:node-set($XSLData)/ANode)"/>
<p>Normalised text from XML nodes - spaces are preserved</p>
<xsl:value-of select="normalize-space(XMLData/ANode)"/>
</xsl:template>
</xsl:stylesheet>
The result is:
Normalised text from node-set function - spaces not preserved
ABC
Normalised text from XML nodes - spaces are preserved
A B C
Can anyone explain this?
Thanks in advance
cheers
Malcolm
Subject: Re: [xsl] Key function using key strings from msxsl:node-set
generated node. Doesn't work?
Hi Gennady,
> Actually it gives Person by Address node-set, not a string. If you
> use this key, you must supply an Address **element**, which is a
> child of the Person element you are looking for. You are supplying a
> string and therefore getting nothing (as it should be).
That's not exactly true. If the expression that you use in the use
attribute of xsl:key evaluates to a node set, then you get a number of
entries for the matched node, one for each node in the node set. The
*value* for these keys is still a string value, just a string value of
the node.
So in:
<xsl:key name="PersonByAddress" match="/People/Person"
use="Address" />
then given that each Person has just one Address, the use attribute
returns a single Address element. The Person element's key value is
the string value of that Address element. It's exactly the same as
defining the key as:
<xsl:key name="PersonByAddress" match="/People/Person"
use="string(Address)" />
Likewise, when you access a key with the key() function, the second
argument always gets converted to a string. There's no need to make
sure that the two expressions (when defining the key and when using
the key) have the same object type.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list