XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 17 Dec 2008 08:23 AM
Hi All,

I am having an XML mentioned below :
<Test>
<a>N11</a>
<a>N1N</a>
<a>N1N</a>
<a>N1N</a>
<a>N1N</a>
</Test>

I need to count the number of 1 appearing in all the nodes.
Literally am expecting an output of 6(as there are 6 1's)

It would be really great If any one could help me on how to get this in XSL....

Postnext
Alberto MassariSubject: count the number of 1 appearing in all the nodes.
Author: Alberto Massari
Date: 17 Dec 2008 08:43 AM
Hi Dhivya,
you can try running string-length(translate(text(), "1 abcd...ABCD...234...", "1")); maybe not an elegant solution, but it should do what you need.

Alberto

Postnext
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 17 Dec 2008 08:52 AM
Hi alberto,
since i have the logic buit inside for each , i guess the string length function will return 2 for the first time 1 for the next time and so on...
will that return an over all count of 6...

Correct me if i am wrong

Thanks,
Dhivya

Postnext
Alberto MassariSubject: count the number of 1 appearing in all the nodes.
Author: Alberto Massari
Date: 17 Dec 2008 09:10 AM
It's up to you to merge the results of the single steps, depending on how you want to aggregate them. If you are interested in just a global count, using a temp variable should work:

<xsl:variable name="v">
<xsl:for-each select="Test/a">
<xsl:value-of select="translate(text(), '1 abcdnABCDN234', '1')"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="string-length($v)"/>

Alberto

Postnext
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 17 Dec 2008 11:04 PM
Originally Posted: 17 Dec 2008 10:53 PM
Hi Alberto,

Thanks for your reply.
Can you pls explain what this translate function will do?
I am not sure of wat this will do.
<xsl:variable name="v">
<xsl:for-each select="Test/a">
<xsl:value-of select="translate(text(), '1 abcdnABCDN234', '1')"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="string-length($v)"/>

Also below is my xsl..
<xsl:for-each select="/informe/tarjetaCredito">
<xsl:variable name="te" select='substring(@comportamiento,0,4)'/>
<xsl:value-of select="$te"/>
</xsl:for-each>

$te will give me N1NN1N
And now I should count the no of 1 on $te such that it should return 2 as the count

How should I go with?
Can you please help me ..?




Regards,
Dhivya

Postnext
Alberto MassariSubject: count the number of 1 appearing in all the nodes.
Author: Alberto Massari
Date: 18 Dec 2008 05:53 AM
For the official description of translate(), look in the official spec:
http://www.w3.org/TR/xpath#function-translate
For your code, just use your $ve variable where I used text()

Alberto

Postnext
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 18 Dec 2008 06:52 AM
Thanks.
Wether that should be <xsl:value-of select="translate($te, '1 abcdnABCDN234', '1')"/>
wat abt this '1 abcdnABCDN234...???

Postnext
Alberto MassariSubject: count the number of 1 appearing in all the nodes.
Author: Alberto Massari
Date: 18 Dec 2008 08:58 AM
The description for the function at the address I provided seems pretty clear to me. What part isn't clear enough?

Alberto

-------------------
Function: string translate(string, string, string)

The translate function returns the first argument string with occurrences of characters in the second argument string replaced by the character at the corresponding position in the third argument string. For example, translate("bar","abc","ABC") returns the string BAr. If there is a character in the second argument string with no character at a corresponding position in the third argument string (because the second argument string is longer than the third argument string), then occurrences of that character in the first argument string are removed. For example, translate("--aaa--","abc-","ABC") returns "AAA". If a character occurs more than once in the second argument string, then the first occurrence determines the replacement character. If the third argument string is longer than the second argument string, then excess characters are ignored.

Postnext
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 18 Dec 2008 11:56 PM
Hi,

Thanks,the solution which you have provided works.
Also i understood the functionality of translate() too............

Thanks a lot

Regards,
Dhivya

Posttop
Dhivya JSubject: count the number of 1 appearing in all the nodes.
Author: Dhivya J
Date: 29 Dec 2008 03:39 AM
Originally Posted: 29 Dec 2008 03:38 AM
Hi,
Below will give me the count of no of 1's in first two positions
<Test>
<xsl:variable name="a">
<xsl:value-of select = "count(/informe/tarjetaCredito[substring(@comportamiento,1,1)='1'])" />
</xsl:variable>
<xsl:variable name="b">
<xsl:value-of select = "count(/informe/tarjetaCredito[substring(@comportamiento,2,1)='1'])" />
</xsl:variable>
<xsl:value-of select="$a + $b />
</Test>

Supposing if i need to count the no of 1's in first 24 characters then the I need to use 24 varaiables and then need to perform the count operation

Is there any other way to acheieve this functionality ?
Thanks ,
Dhivya.J

 
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.