如何修复Groovy代码为XML每个DataRow补全缺失Field节点?
解决嵌套XML中DataRow缺失节点的补充问题
需求说明
输入是包含多个DataRow节点的DataTable结构XML,部分DataRow缺失Field2、Field3节点;需要确保输出的每个DataRow都包含Field1、Field2、Field3节点,缺失的节点以空元素形式补充。
Groovy实现代码
下面是适配嵌套结构的Groovy代码,使用XmlSlurper处理XML,遍历每个DataRow并补充缺失字段:
import groovy.xml.XmlSlurper import groovy.xml.XmlNodePrinter // 示例输入XML def inputXml = '''<DataTable> <DataRow> <Field1>Value1</Field1> </DataRow> <DataRow> <Field1>Value2</Field1> <Field2>Value2-2</Field2> </DataRow> <DataRow> <Field3>Value3-3</Field3> </DataRow> </DataTable>''' // 解析XML,保留原格式的空白字符 def xml = new XmlSlurper().parseText(inputXml) xml.keepWhitespace = true // 定义必须存在的字段列表 def requiredFields = ['Field1', 'Field2', 'Field3'] // 遍历每个DataRow节点 xml.DataRow.each { row -> requiredFields.each { field -> // 检查当前DataRow是否已存在该字段节点 if (!row."$field".size()) { // 不存在则添加空节点 row.appendNode(field, '') } } } // 格式化输出处理后的XML def printer = new XmlNodePrinter(new PrintWriter(System.out)) printer.preserveWhitespace = true printer.print(xml)
代码说明
- 使用
XmlSlurper解析XML,设置keepWhitespace保留原文档的空白格式,避免输出混乱 - 定义
requiredFields数组统一管理需要检查的字段,方便后续扩展 - 遍历每个
DataRow节点,对每个必填字段判断是否存在:通过row."$field".size()判断节点数量,为0则说明缺失 - 用
appendNode方法添加空内容的字段节点 - 使用
XmlNodePrinter格式化输出,保证XML结构可读性
示例输出
运行上述代码后,输出的XML会是:
<DataTable> <DataRow> <Field1>Value1</Field1> <Field2></Field2> <Field3></Field3> </DataRow> <DataRow> <Field1>Value2</Field1> <Field2>Value2-2</Field2> <Field3></Field3> </DataRow> <DataRow> <Field3>Value3-3</Field3> <Field1></Field1> <Field2></Field2> </DataRow> </DataTable>
如果需要调整字段的顺序,可以修改requiredFields的顺序,或者在添加节点时指定插入位置(比如插入到指定节点之后)。
内容的提问来源于stack exchange,提问作者mabt
相关产品推荐
相关产品推荐

