2013-05-29 3 views
0

XML에 표시된 각 잘못된 숫자 (BTNumber)의 모양을 계산해야합니다.xmlSlurper를 사용하여 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> 
- 나는 수를 계산하고 예 -

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

XML 코드 (이 XML에 여러 번)

을 계산하는 방법을 제안 호야 끝내 XmlSlurper()를 사용하고하는 것은 아래로이다

XMLSlurper보다 쉽고 빠르면 좋습니다.

답변

1

먼저 xml이 <Results>으로 반복되었습니다. 그게 필요해?

당신은 count 해당 고유 id의지도를 얻기 위해 다음과 같은 것을 사용할 수 있습니다

xml이 당신의 XML 요소는 질문에서 언급 한
def xmlObj = new XmlSlurper().parseText(xml) 
def btNumbers = xmlObj.Row.collect{it.BTNumber} 
def countMap = btNumbers.unique(false).collectEntries{btNumber-> 
    [btNumber, btNumbers.count(btNumber)] 
} 

.

<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