使用Groovy和XmlSlurper解析XML并迭代标签

纳仁

我可以使用Groovy和XmlSlurper通过HTTP URL解析XML,并输出与标签关联的值。下面是生成的示例XML页面。

<worklog>
   <worklog_id>10100</worklog_id>
   <issue_key>TST-3</issue_key>
   <hours>2.0</hours>
   <work_date>2014-01-01</work_date>
   <work_date_time>2014-01-01 00:00:00</work_date_time>
   <username>admin</username>
   <reporter>admin</reporter>
</worklog>
<worklog>
   <worklog_id>10200</worklog_id>
   <issue_key>TST-3</issue_key>
   <work_date>2014-01-02</work_date>
   <work_date_time>2014-01-02 00:00:00</work_date_time>
   <username>admin</username>
   <reporter>admin</reporter>
</worklog>
<worklog>
   <worklog_id>10201</worklog_id>
   <issue_key>TST-3</issue_key>
   <hours>0.25</hours>
   <work_date>2014-01-02</work_date>
   <work_date_time>2014-01-02 10:33:00</work_date_time>
    <username>admin</username>
   <reporter>admin</reporter>
 </worklog>
<worklog>
   <worklog_id>10400</worklog_id>
   <issue_key>TST-3</issue_key>
   <hours>2.0</hours>
   <work_date>2014-01-07</work_date>
   <work_date_time>2014-01-07 12:03:00</work_date_time>
    <username>admin</username>
   <reporter>admin</reporter>
 </worklog>
<worklog>
   <worklog_id>10202</worklog_id>
   <issue_key>TST-4</issue_key>
   <hours>1.0</hours>
   <work_date>2014-01-02</work_date>
   <work_date_time>2014-01-02 15:52:00</work_date_time>
   <username>admin</username>
   <reporter>admin</reporter>
 </worklog>

但是,在我的XML中,我需要遍历我的XML并寻找具有相同值的issue_key标记。如果有多个具有相同值的issue_key标记(如此处的“ TST-3”中所示),那么我想为该单个issue_key标记收集并合并与小时work_date,work_date_time,用户名,activity_name,work_description,parent_key,reporter标记相关的值然后将其以与生成具有相同issue_key值的其他标签相同的顺序输出。

很抱歉,对于Groovy和XmlSlurper来说是一个完全菜鸟。但是谁能让我知道如何去做。另外,下面是我的Groovy代码,用于从XML获取属性。

def worklogList = new ArrayList<Worklog>()
    def wklog
    def worklogs = new XmlSlurper().parse(new File("C:\\xml-worklog\\worklog.xml"))
    worklogs.worklog.each {node ->
        wklog = new Worklog();

        wklog.work_date = node.work_date
        wklog.work_date_time = node.work_date_time
        wklog.issue_key = node.issue_key
        wklog.hours = node.hours
        wklog.username = node.username
        wklog.reporter = node.reporter
        worklogList.add(wklog)
    }
    worklogList.each {wklogT -> println(wklogT)}
}

class Worklog
{
String issue_key
String hours
String work_date
String work_date_time
String username
String activity_name
String work_descripton
String reporter

    @Override
    public String toString()
    {
        return "Issue Key: ${issue_key} \t Hours: ${hours} \t Work Date: ${work_date} \t Work Date Time: ${work_date_time} \t Username: ${username} \t Reporter: ${reporter} \t Activity Name: ${activity_name} \t Description: ${work_descripton}"
    }
}

特定发行密钥的预期o / p,假设“ TST-3”为-


工作时间| 工作日期 工作日期时间| 用户名| 记者


2.0 | 2014-01-01 | 2014-01-01 00:00:00 | 管理员| 管理员|


| 2014-01-02 | 2014-01-02 00:00:00 | admin | admin |

0.25 | 2014-01-02 | 2014-01-02 10:33:00 | 管理员| 管理员|


2.0 | 2014-01-07 | 2014-01-02 12:03:00 | 管理员| 管理员|


如何为每个issue_key属性在有序列表对象中获取这些值。

海鸥

作为解决问题的一种快速且可中继的方法,建议您创建一个工厂方法,该方法将Worklog通过发布密钥为您初始化实例。

在这种情况下,您只需做很小的更改就可以处理xml。下面是处理工作日志的代码草案。

def worklogs = [:]
def createWorklog(String id) {
   if (!worklogs.containsKey(id))
     worklogs[id] = new Worklog()
   return worklogs[id]
}

worklogs.worklog.each {node ->
    wklog = createWorklog(node.issue_key); // creates, or give created, and save it to list.

    // It don't know, what do you want to do with different dates or usernames.
    // If you want, you can have a list of them, and add value to list here, or consolidate whole change structures to list.
    wklog.hours += node.hours // aggregate hours.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Groovy和XmlSlurper解析XML并迭代标签

来自分类Dev

Groovy XmlSlurper解析混合的文本和节点

来自分类Dev

如何在Groovy中使用XMLSlurper获取html标签文本

来自分类Dev

使用XmlSlurper或XmlParser更改xml元素/标签名称

来自分类Dev

Groovy的XmlSlurper如何解决由于DOCTYPE和DTD限制而拒绝解析HTML的问题?

来自分类Dev

在Groovy中将XML名称空间与XmlSlurper结合使用-如何正确查询路径?

来自分类Dev

如何使用XmlSlurper删除Groovy中的元素?

来自分类Dev

使用XmlSlurper解析xml时如何读取冒号属性名称(例如model:name)

来自分类Dev

jQuery从单个和多个标签解析xml

来自分类Dev

如何使用 Python 和 XSLT 文件迭代解析巨大的 XML 并写入 CSV

来自分类Dev

Groovy XmlSlurper:按XML中的属性值查找属性名称

来自分类Dev

使用Groovy的XmlParser解析属性和值

来自分类Dev

具有TagSoup和不间断空间值的Groovy XmlSlurper

来自分类Dev

具有TagSoup和不间断空间值的Groovy XmlSlurper

来自分类Dev

使用XSL解析XML内的标签

来自分类Dev

使用多个相同的标签解析XML

来自分类Dev

使用python解析XML中的同名标签

来自分类Dev

使用ElementTree顺序解析某些XML标签

来自分类Dev

无法使用Python从XML解析标签

来自分类Dev

xml解析以进行迭代

来自分类Dev

使用'xmlbf'解析具有'nil'属性和空'element'标签的XML

来自分类Dev

使用PHP中的DOM解析器获取xml文档的标签和内容

来自分类Dev

Groovy解析xml

来自分类Dev

在Groovy中解析XML

来自分类Dev

使用XStream解析-空标签和集合

来自分类Dev

使用 Groovy 从文档中断言特定的 xml 标签

来自分类Dev

解析具有相同标签和不同属性的xml

来自分类Dev

VTD XML 解析。根据标签和属性获取值

来自分类Dev

为什么我的XML解析器会不断在Swift中的标签之间进行迭代?

Related 相关文章

  1. 1

    使用Groovy和XmlSlurper解析XML并迭代标签

  2. 2

    Groovy XmlSlurper解析混合的文本和节点

  3. 3

    如何在Groovy中使用XMLSlurper获取html标签文本

  4. 4

    使用XmlSlurper或XmlParser更改xml元素/标签名称

  5. 5

    Groovy的XmlSlurper如何解决由于DOCTYPE和DTD限制而拒绝解析HTML的问题?

  6. 6

    在Groovy中将XML名称空间与XmlSlurper结合使用-如何正确查询路径?

  7. 7

    如何使用XmlSlurper删除Groovy中的元素?

  8. 8

    使用XmlSlurper解析xml时如何读取冒号属性名称(例如model:name)

  9. 9

    jQuery从单个和多个标签解析xml

  10. 10

    如何使用 Python 和 XSLT 文件迭代解析巨大的 XML 并写入 CSV

  11. 11

    Groovy XmlSlurper:按XML中的属性值查找属性名称

  12. 12

    使用Groovy的XmlParser解析属性和值

  13. 13

    具有TagSoup和不间断空间值的Groovy XmlSlurper

  14. 14

    具有TagSoup和不间断空间值的Groovy XmlSlurper

  15. 15

    使用XSL解析XML内的标签

  16. 16

    使用多个相同的标签解析XML

  17. 17

    使用python解析XML中的同名标签

  18. 18

    使用ElementTree顺序解析某些XML标签

  19. 19

    无法使用Python从XML解析标签

  20. 20

    xml解析以进行迭代

  21. 21

    使用'xmlbf'解析具有'nil'属性和空'element'标签的XML

  22. 22

    使用PHP中的DOM解析器获取xml文档的标签和内容

  23. 23

    Groovy解析xml

  24. 24

    在Groovy中解析XML

  25. 25

    使用XStream解析-空标签和集合

  26. 26

    使用 Groovy 从文档中断言特定的 xml 标签

  27. 27

    解析具有相同标签和不同属性的xml

  28. 28

    VTD XML 解析。根据标签和属性获取值

  29. 29

    为什么我的XML解析器会不断在Swift中的标签之间进行迭代?

热门标签

归档