Re: [xsl] test on string-length of text() for element with node

Subject: Re: [xsl] test on string-length of text() for element with node
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Fri, 5 Aug 2011 15:43:51 +0100
Ah sorry it's because in XSLT 1.0 'first item semantics' kick in when
you supply a sequence of more than 1 item to a function that expects
only one... so doing /text() returns multiple nodes and then all but
the first are silently dropped.

I haven't written any xslt 1.0 for a long time, but I think you would
need to store all the text node in a variable, then get the string
length of that:

<xsl:variable name="text">
  <xsl:for-each select="/path/to/maritalstatus/text()">
    <xsl:value-of select="."/>
  </xsl:for-each>
</xsl:variable>

<xsl:value-of select="string-length($text)"/>

If you want to ignore whitespace only nodes, then use xsl:strip-space
on the <maritalstatus> element or do text()[normalize-space(.)]

cheers
andrew


On 5 August 2011 15:27, Bram Reader <bram.listmail@xxxxxxxxx> wrote:
> I also thought so, but I don't know why its not working.
>
> If 'textstring' is placed direct after the starttag <maritalstatus>,
> followed by the child elements it works.
>
> But in this case it doesn't work
>
> Regards,
> Boudewijn
>
> 2011/8/5 Andrew Welch <andrew.j.welch@xxxxxxxxx>:
>> On 5 August 2011 15:06, Bram Reader <bram.listmail@xxxxxxxxx> wrote:
>>> Hello,
>>>
>>> Probably it's not difficult, but I'm struggling with the following
>>> issue (maybe it's because it's Friday afternoon)
>>>
>>> From an xml node set, I need to select the string-length of an
>>> elements content without its child elements.
>>>
>>> xml node set
>>>
>>> <maritalstatus>
>>>        <cs:info xmlns:cs="http://cs.nl/cs"; id="6">
>>>                <codeList>maritalstatus</codeList>
>>>                <instruction id="7">no instruction</instruction>
>>>                <length>1</length>
>>>                <minOccurs>0</minOccurs>
>>>                <pattern>\d*</pattern>
>>>        </cs:info>
>>>        <cs:update xmlns:cs="http://cs.nl/cs";>
>>>                <additionalInfo>test</additionalInfo>
>>>                <oldData>2</oldData>
>>>                <newData>5</newData>
>>>        </cs:update>textstring
>>> </maritalstatus>
>>>
>>> From the element <maritalstatus> the string-length of only
>>> 'textstring' must be selected. How do I escape the child elements in
>>> the xsl:value-of select.
>>> I'm using XSLT 1.0 with xsltproc.
>>
>> Its just:
>>
>> maritalstatus/text()
>>
>>
>> --
>> Andrew Welch
>> http://andrewjwelch.com
>
>



--
Andrew Welch
http://andrewjwelch.com

Current Thread