Subject: Re: [xsl] test on string-length of text() for element with node From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx> Date: Sat, 6 Aug 2011 01:03:21 +0200 |
| <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)"/> | that is correct, but can be done shorter ... <xsl:variable name="text"><xsl:copy-of select="/path/to/maritalstatus/ text()"/></xsl:variable> <xsl:value-of select="string-length($text)"/> Mit besten Gruessen / Best wishes, Hermann Stamm-Wilbrandt Developer, XML Compiler, L3 Fixpack team lead WebSphere DataPower SOA Appliances https://www.ibm.com/developerworks/mydeveloperworks/blogs/HermannSW/ ---------------------------------------------------------------------- IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martin Jetter Geschaeftsfuehrung: Dirk Wittkopp Sitz der Gesellschaft: Boeblingen Registergericht: Amtsgericht Stuttgart, HRB 243294 From: Andrew Welch <andrew.j.welch@xxxxxxxxx> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Date: 08/05/2011 04:44 PM Subject: Re: [xsl] test on string-length of text() for element with node 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] test on string-length of , Andrew Welch | Thread | Re: [xsl] test on string-length of , Murray McDonald |
Re: [xsl] test on string-length of , Andrew Welch | Date | [no subject], Unknown |
Month |