Groovy:为具有属性集合的对象集合动态创建 XML

2023-12-07

我有一组具有属性的字段。每个属性都是单个值或对象的集合(可为 null、一个或多个)

我需要为此创建一个类似 xml 的树。

到目前为止,我发现的所有示例要么是静态的,要么是将映射转换为 xml。 在循环中向 xml 添加节点的正确方法是什么?


您可以做这种事情,但是没有任何输入示例和所需的输出,这一切都只是盲目的猜测:

import groovy.xml.*

def collection = [
  [ name:'tim', pets:['cat','dog'], age:null ],
  [ name:'brenda', pets:null, age:32 ]
]

def process = { binding, element, name ->
  if( element[ name ] instanceof Collection ) {
    element[ name ].each { n ->
      binding."$name"( n )
    }
  }
  else if( element[ name ] ) {
    binding."$name"( element[ name ] )
  }
}

println XmlUtil.serialize( new StreamingMarkupBuilder().with { builder ->
  builder.bind { binding ->
    data {
      collection.each { e ->
        item {
          process( binding, e, 'name' )
          process( binding, e, 'pets' )
          process( binding, e, 'age' )
        }
      }
    }
  }
} )

打印:

<?xml version="1.0" encoding="UTF-8"?><data>
  <item>
    <name>tim</name>
    <pets>cat</pets>
    <pets>dog</pets>
  </item>
  <item>
    <name>brenda</name>
    <age>32</age>
  </item>
</data>

edit

在您发表以下评论后,仍然不确定您拥有或想要什么,但这似乎满足您的标准:

import groovy.xml.*

def process = { binding, element, name ->
  if( element[ name ] instanceof Collection ) {
    element[ name ].each { n ->
      binding."$name"( n )
    }
  }
  else if( element[ name ] ) {
    binding."$name"( element[ name ] )
  }
}

class Form {
  List fields  
}

// Create a new Form object
f = new Form( fields:[ [ name:'a', val:21 ], [ name:'b' ], [ name:'c', val:[ 1, 2 ], x:'field x' ] ] )

// Serialize it to XML
println XmlUtil.serialize( new StreamingMarkupBuilder().with { builder ->
  builder.bind { binding ->
    data {
      f.fields.each { fields ->
        item {
          fields.each { name, value ->
            process( binding, fields, name )
          }
        }
      }
    }
  }
} )

并打印:

<?xml version="1.0" encoding="UTF-8"?><data>
  <item>
    <name>a</name>
    <val>21</val>
  </item>
  <item>
    <name>b</name>
  </item>
  <item>
    <name>c</name>
    <val>1</val>
    <val>2</val>
    <x>field x</x>
  </item>
</data>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy:为具有属性集合的对象集合动态创建 XML 的相关文章

  • 使用转置以完全外连接样式合并列表

    我正在尝试返回一个加入列表 但连接必须像数据库完全外连接一样 例如 给出以下内容 def x a 1 b 2 a 1 b 3 a 2 b 4 a 3 b 5 def y f 10 b 2 g 7 f 100 b 3 g 8 f 20 b 4
  • Grails 测试中的模拟配置

    在 Grails 2 0 X 之前 可以使用mockConfig测试扩展的基类提供的方法 然而 在 Grails 2 0 X 中 建议测试类使用 TestFormixin 而不是扩展基类 这个 mixin 似乎没有提供任何与mockConf
  • 在 mule 中使用 groovy 表达式来限制 IP

    我在 mule 中使用 cxf 创建了一个代理服务 我的 mule 版本是 3 3 0 CE 现在 我想在使用代理服务创建的 wsdl 中添加限制 我的限制不应允许他们看到我的 wsdl 的每个 IP 为此 我找到了 Groovy 表达式和
  • JAXB 是否支持在不进行编组/反编组的情况下修改现有 XML 文档?

    我想在文档中保留注释 排序等 并使用 Java 界面就地编辑文档 JAXB 这样做吗 其他工具 例如 XMLBeans 是否可以执行此操作 您可以使用 JAXBBinder http download oracle com javase 6
  • XML/XSD 智能感知在 Visual Studio 2010 中不起作用

    我正在 VS 2010 中处理 xml 和 xsd 文件 但智能感知不起作用 然而 Intellisense 在 VS 2008 中处理相同的文件 当我输入 我缺少的 VS 2008 和 VS 2010 之间有什么区别吗 我将 xsd 文件
  • 如何设置 Visual Studio XML 文档的格式以在 Web 上显示

    我正在使用 Visual Studio 2010 并开始做一个好孩子 并通过 XML 注释记录我编写的所有代码 我有一个记录良好的项目 我什至想出了如何让 Visual Studio 在构建时输出完整的 XML 文档 我的问题是 在网络上格
  • 如何在c# wpf中获取元素的标签?

    我正在尝试使用 WPF 构建一个 GUI 在其中我可以绘制一些基本形状并将它们存储到 xml 文件中 形状是在 xaml 文件中设计的 我为每个形状添加了标签 现在我想在代码中获取它们的标签值 并将其作为属性存储在输出 xml 文件中 例如
  • 处理 CFchart 时的实际 XML 文件位置

    谁能告诉我在使用 Coldfusion 时是否需要将 xml 文件放在单独的目录中 现在我已将 xml 文件保存在 cfm 文件所在的同一目录中 当我运行文件 cfm 时 它说 Could not locate the style file
  • PHP 对象作为 XML 文档

    获取给定 PHP 对象并将其序列化为 XML 的最佳方法是什么 我正在查看 simple xml 并用它来将 XML 解析为对象 但我不清楚它是如何以相反的方式工作的 我同意使用 PEAR 的 XML Serializer 但是如果您想要一
  • WYSIWYG XML 编辑器(基于 DTD 或 RelaxNG 或 XSD 的语法)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要为自定义 XML 语法创建一个
  • Android - 可绘制形状样式的多种颜色和尺寸

    我试图为我的 TextView 设置圆形背景 因此我创建了如下形状样式 但我需要有多种颜色和多种尺寸 而 textSize 保持不变 所以我需要在样式中设置宽度 高度 以我的理解 图层列表 http developer android co
  • 如何从詹金斯管道获取所有参数(参数化构建)?

    我正在较新版本的 jenkins 中构建一个参数化管道作业 在较旧版本的 jenkins 中 我使用 getbinding getVariables 来检索所有参数 但较新的版本它返回空值 如何在新版本的詹金斯中检索参数 全部 您可以使用
  • 在 Eclipse 中编译 Groovy 文件

    我的 java web 项目包含一些 Groovy 代码 但 Eclipse 无法识别 Groovy 文件 也无法从中生成任何类 我已经在 Eclipse 中安装了 Groovy 插件 在我的 Windows 机器中安装 Groovy 并设
  • 如何从 PHP 输出 XML 字符串

    我正在获取一个 XML 字符串并在 PHP 中对其进行编辑 以便在访问 PHP 文件时最终输出编辑后的 XML 字符串 我一直在尝试使用 echo 和 print 来输出 XML 文档 但它只打印最里面标签内的数据 我希望它的功能就像直接加
  • php simpleXMLElement 到数组:空值

    我有以下 XML
  • 获取 Wi-Fi 配置文件信息

    我使用的是 Windows 8 1 它没有工具 带有 GUI 来管理 wifi 网络配置文件 所以我正在写一篇对我有帮助的文章 我做了一些谷歌搜索并发现托管 Wifi API https managedwifi codeplex com 并
  • 从 url 中删除域的最佳方法

    我必须从中删除域的网址 您是否知道在不使用以下内容的情况下实现这一目标的更好方法 def 示例 decodeUrl replace http www espn com http www espn com Thanks 使用 java net
  • 与字符串比较在 Jenkins 管道中不起作用

    知道为什么IF ELSE下面的作品 def checkPrValidity wordCountStr sh returnStdout true script git diff ignore space at eol target branc
  • 如何解析无效(错误/格式不正确)的 XML?

    目前 我正在开发一项功能 该功能涉及解析从其他产品收到的 XML 我决定针对一些实际的客户数据运行一些测试 看起来其他产品允许用户输入应被视为无效的输入 无论如何 我仍然必须尝试找出解析它的方法 我们正在使用javax xml parser
  • 文件存在时,FileMode.Open 和 FileMode.OpenOrCreate 有何区别? c# 错误?

    我已经写了该代码 public void Save using FileStream fs new FileStream Properties Settings Default settings file path FileMode Ope

随机推荐