Subject: RE: [xsl] length of string from a set of nodes. From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 27 Mar 2009 18:00:06 -0000 |
I often tell people to avoid using an xsl:variable with content when they could use the select attribute. In fact, if (a) you have an "as" attribute, and (b) the content is xsl:sequence, then the two constructs are pretty well equivalent. I would rewrite <xsl:variable name="slen" as="xs:integer"><xsl:sequence select="string-length($strings)"/></xsl:variable> as <xsl:variable name="slen" as="xs:integer" select="string-length($strings)"/> but the difference is essentially aesthetic. But value-of should be rewritten: <xsl:variable name="strings" as="xs:string"><xsl:value-of > select="answers"/></xsl:variable> should either be <xsl:variable name="strings" as="xs:string"><xsl:sequence > select="answers"/></xsl:variable> or more simply <xsl:variable name="strings" as="xs:string" select="answers"/> That's because xsl:value-of creates a text node, which you don't need to do. And of course, you could combine the two variables: <xsl:variable name="slen" as="xs:integer" select="string-length(answers)"/> Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Fred Christian [mailto:fredc@xxxxxxxxxx] > Sent: 27 March 2009 17:46 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] length of string from a set of nodes. > > I was able to get this to work, but while reading about it, I > see all these little tips and recommendations regarding being > efficient and not creating nodes when you only need strings. > > In this code my goal was meet of deciding if the length of > all the text concatenated together is greater than 30. > <xsl:variable name="strings" as="xs:string"><xsl:value-of > select="answers"/></xsl:variable> > <xsl:variable name="slen" as="xs:integer"><xsl:sequence > select="string-length($strings)"/></xsl:variable> > <xsl:for-each select="answers"> > <xsl:choose> > <xsl:when test="$slen gt 30"> etc... > > I tried various combinations of using the <<concat()>> > function, <<xsl:sequence>>, and <<xsl:value-of>>. This is > what ended up working. > > Is there a "better" way to do this? > Thanks
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] length of string from a s, Martin Honnen | Thread | Re: [xsl] length of string from a s, Fred Christian |
Re: [xsl] length of string from a s, Martin Honnen | Date | Re: [xsl] Numbering new nodes using, Michael Ludwig |
Month |