2013-05-29 102 views
0

我必須計算出現在XML中的每個無效數字(BTNumber)的外觀。我使用Groovy的XmlSlurper()。請建議如何計算的數量和計數(儘可能多的時候,它是XML)使用xmlSlurper獲取XML中每個重複條目的計數

的示例 -

BTNumber  | count 
---------------------------------- 
    2205867438 | 2 
    78124614  | 3 

XML代碼爲下 -

<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> 

如果還有什麼比XMLSlurper更簡單快捷,請提出建議。

回答

1

首先,您的xml已重複<Results>。你需要嗎?

您可以使用類似下面讓地圖的獨特id和相應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)] 
} 

xml是你的XML元素在問題中提到。

<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> 
+0

完美地工作!非常感謝,D @ Genius :-)。 – sana

+0

很高興它有幫助。 – dmahapatro