我必须计算XML中出现的每个无效数字(BTNumber)的外观。我正在使用groovy 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更容易,更快捷。
答案 0 :(得分: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>
答案 1 :(得分:0)
说有一个附加的数量字段,这是在此xml中检查类似BTnumbers值并在groovy中添加相应的QTY值的理想方法。