This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Normalize-space does not work for node generated from msxml:node-set function
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>, "'Gennady Loskutov'" <g_loskutov at myrealbox dot com>
- Date: Tue, 19 Mar 2002 08:36:17 -0000
- Subject: RE: [xsl] Normalize-space does not work for node generated from msxml:node-set function
- Reply-to: xsl-list at lists dot mulberrytech dot com
There is no whitespace in the result tree fragment, so there is no way it
can be preserved. Whitespace-only text nodes in a stylesheet are always
stripped (ie, they have no effect.)
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of
> Macaulay,Malcolm (US)
> Sent: 19 March 2002 00:15
> To: xsl-list@lists.mulberrytech.com; Gennady Loskutov;
> jeni@jenitennison.com
> Subject: [xsl] Normalize-space does not work for node generated from
> msxml:node-set function
>
>
> 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
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list