首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xmlSlurper获取XML中每个重复条目的计数

使用xmlSlurper获取XML中每个重复条目的计数
EN

Stack Overflow用户
提问于 2013-05-30 03:11:27
回答 2查看 1.7K关注 0票数 0

我必须计算出现在XML中的每个无效数字(BTNumber)的出现次数。我正在使用groovy XmlSlurper() .Please建议如何计数和计数(就像在xml中一样多次)。

例如:

代码语言:javascript
复制
   BTNumber     | count
 ----------------------------------
   2205867438   |   2
   78124614     |   3

XML代码如下所示-

代码语言:javascript
复制
<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更容易、更快的,请给我建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-30 04:00:39

首先,您的xml重复了<Results>。你需要这个吗?

您可以使用如下内容来获取唯一id和相应count的映射

代码语言:javascript
复制
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元素。

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2019-08-23 11:41:21

假设有一个额外的quantity字段,那么在这个BTnumbers中检查相似的QTY值并在Groovy中添加相应的QTY值的理想方法是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16822022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档