【问题标题】:Groovy parse xmlGroovy 解析 xml
【发布时间】:2023-04-05 23:09:01
【问题描述】:

我是 groovy 的新手 任何人都可以帮助解析这个 xml 以获得每个 num 元素的值列表

 NAMES>
    <NAMESet fetchSize="3">
    <String StringNumber="1">
        <NUM>1</NUM>
    </String>
    <String StringNumber="2">
        <NUM>2</NUM>
    </String>
    <String StringNumber="3">
        <NUM>3</NUM>
</NAMESet>

提前致谢!

【问题讨论】:

  • 嘿,google is your friend。你试过first link吗?它是 groovy 和 xml 的官方文档。如果您对此有任何疑问,请发布一些有关发生情况的信息。
  • 另外,XML 看起来很糟糕。是这个问题吗?
  • 到目前为止还向我们展示您的代码
  • 是的,我已经检查过了。我不知道如何获取 NUM 个节点之一的值
  • 贴出你试过的代码

标签: xml parsing groovy parsexml


【解决方案1】:

XML 很糟糕,但cyberneko 可以解决这个问题。不过,它构建了一些 HTML 结构:

xml=''' NAMES>
    <NAMESet fetchSize="3">
    <String StringNumber="1">
        <NUM>1</NUM>
    </String>
    <String StringNumber="2">
        <NUM>2</NUM>
    </String>
    <String StringNumber="3">
        <NUM>3</NUM>
</NAMESet>'''


names = new XmlSlurper( new org.cyberneko.html.parsers.SAXParser() ).parseText xml

assert names.BODY.NAMESET.STRING.NUM.collect { it.text() } == 
    ['1', '2', '3']

【讨论】:

    【解决方案2】:

    最后是这样写的:

    def records = new XmlParser().parseText(xml)
    def size = records.ResultSet.Row.ID.size()
    println(size)
    def allRecords = records.ResultSet.Row.ID[1].text()
    println(allRecords)
    for (int i = 0; i < size; i++) {
    println(records.ResultSet.Row.ID[i].text())
    }
    

    无论如何,谢谢

    【讨论】:

    • 但这甚至与您在问题中发布的 XML 不同
    • 是的,这里的想法是一样的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    相关资源
    最近更新 更多