[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Normalize-space does not work for node generated from

Subject: Normalize-space does not work for node generated from msxml:node-set function
From: "Macaulay,Malcolm (US)" <Malcolm.Macaulay2@xxxxxxxxx>
Date: Mon, 18 Mar 2002 18:15:10 -0600
not normalize space .
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:  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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.