Subject: [xsl] 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 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XPath engines for Java, Johannes Döbler | Thread | RE: [xsl] Normalize-space does not , Michael Kay |
[xsl] XPath engines for Java, Elliotte Rusty Harol | Date | [xsl] Ann: PSMI - Interleaving geom, G. Ken Holman |
Month |