You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy处理XML时如何正确保留prod节点的子节点结构?

解决Groovy XML格式化中prod子节点缺失问题

你的问题核心是没有正确复制prod节点的子元素,直接引用原节点只会复用结构但不会深拷贝子节点。以下是修改思路和代码示例:

错误原因

新手常犯的错误是直接把原XML中的prod节点放到新节点里,但Groovy的XmlSlurper/MarkupBuilder处理节点时,直接引用只会处理属性,不会自动复制子节点。

修改后的代码

// 示例输入XML
def inputXml = '''<root>
    <orderstartdate>2024-01-01</orderstartdate>
    <StartDate>2024-01-03</StartDate>
    <prod>
        <id>123</id>
        <count>5</count>
    </prod>
</root>'''

// 解析原始XML
def xml = new XmlSlurper().parseText(inputXml)
def startDate = Date.parse("yyyy-MM-dd", xml.orderstartdate.text())
def endDate = Date.parse("yyyy-MM-dd", xml.StartDate.text())

// 构建新XML
def newXmlBuilder = new groovy.xml.MarkupBuilder()
newXmlBuilder.root {
    // 遍历日期区间生成results节点
    (startDate..endDate).each { currentDate ->
        results(date: currentDate.format("yyyy-MM-dd")) {
            // 手动构建prod节点并复制所有子节点
            prod {
                xml.prod.children().each { childNode ->
                    // 动态创建子节点并赋值文本内容
                    "${childNode.name()}"(childNode.text())
                }
            }
        }
    }
}

关键改动点

  • 不再直接引用原xml.prod,而是遍历它的所有子节点(children())
  • 动态创建每个子节点(比如id、count)并填充原节点的文本内容
  • 确保每个results节点下的prod都完整包含id和count子元素

验证输出

运行后会生成每个日期对应的results节点,每个prod下都会有正确的id和count:

<root>
  <results date='2024-01-01'>
    <prod>
      <id>123</id>
      <count>5</count>
    </prod>
  </results>
  <results date='2024-01-02'>
    <prod>
      <id>123</id>
      <count>5</count>
    </prod>
  </results>
  <results date='2024-01-03'>
    <prod>
      <id>123</id>
      <count>5</count>
    </prod>
  </results>
</root>

内容的提问来源于stack exchange,提问作者N21RL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:46:10