I have to count the appearance of each invalid number (BTNumber) appeared in XML. I am using groovy XmlSlurper() .Please suggest how to count the number and count (as many times it is in xml)
for example-
BTNumber | count
----------------------------------
2205867438 | 2
78124614 | 3
XML code is as under -
<Results>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2205867438
</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>2461253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:50:04.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2205867438</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>2461253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:50:18.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2201159526</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>1111253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:53:07.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>1011159526</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>1111253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:53:18.0</DateStamp>
</Row>
</Results>
<Results>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>78124614</BTNumber>
<CPNumber>78124614</CPNumber>
<DialedNumber>7812461400</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>MyNetwork</CarrierCode>
<DateStamp>2013-03-24 10:18:50.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>78124614</BTNumber>
<CPNumber>78124614</CPNumber>
<DialedNumber>7812461400</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>MyNetwork</CarrierCode>
<DateStamp>2013-03-24 15:35:31.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>78124614</BTNumber>
<CPNumber>78124614</CPNumber>
<DialedNumber>7812461400</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>MyNetwork</CarrierCode>
<DateStamp>2013-03-24 15:36:59.0</DateStamp>
</Row>
</Results>
Please suggest if anything else is easier and quicker than XMLSlurper .
First, your xml has repeated <Results>
. Do you need that?
You can use something like below to get a map of unique id
and corresponding count
:
def xmlObj = new XmlSlurper().parseText(xml)
def btNumbers = xmlObj.Row.collect{it.BTNumber}
def countMap = btNumbers.unique(false).collectEntries{btNumber->
[btNumber, btNumbers.count(btNumber)]
}
Where xml
is your xml element mentioned in question.
<Results>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2205867438</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>2461253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:50:04.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2205867438</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>2461253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:50:18.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>2201159526</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>1111253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:53:07.0</DateStamp>
</Row>
<Row>
<DialedCountry>001</DialedCountry>
<BTNumber>1011159526</BTNumber>
<CPNumber>0000000000</CPNumber>
<DialedNumber>1111253052</DialedNumber>
<Wireless>1</Wireless>
<CarrierCode>customer1</CarrierCode>
<DateStamp>2013-03-24 11:53:18.0</DateStamp>
</Row>
</Results>