bean-io - 如何抑制 BeanIO XML 生成中的根元素?
问题描述
使用 BeanIO 生成 XML 文件时,StreamBuilder 名称用作根元素。如何抑制这个根元素?
例子:
StreamBuilder builder = new StreamBuilder("builder_name")
.format("xml")
.parser(new XmlParserBuilder()).addRecord(Test.class);
Test
班级:
@Record
public class Test {
@Field(at=0)
private String field1 = "ABC";
// Getters and Setters ...
}
生成的 XML 文件:
<builder_name>
<Test>
<field1>ABC</field1>
</Test>
</builder_name>
我不想builder_name
被显示为根元素。我希望Test
元素成为根。我怎样才能做到这一点?
解决方案
您需要在流配置中设置xmlType
属性/属性。XmlType.NONE
答案在文档的附录 A - XML 映射文件参考 中。
xmlType - 映射到流的 XML 节点类型。如果未指定或设置为 element,则流将映射到正在编组或取消编组的 XML 文档的根元素。如果设置为 none,则 XML 输入流将被完全读取并映射到子组或记录。
现在的诀窍是将这条信息转换为 StreamBuilder API,即:
xmlType(XmlType.NONE)
你的例子就变成了:
StreamBuilder builder = new StreamBuilder("builder_name")
.format("xml")
.xmlType(XmlType.NONE)
.parser(new XmlParserBuilder())
.addRecord(Test.class);
这会产生这个未格式化/未缩进的输出:
<?xml version="1.0" encoding="utf-8"?><test><field1>ABC</field1></test>
要格式化 xml(漂亮的打印)/缩进使用:
StreamBuilder builder = new StreamBuilder("builder_name")
.format("xml")
.xmlType(XmlType.NONE)
.parser(new XmlParserBuilder()
.indent()
)
.addRecord(Test.class);
请注意对 , 的更改以XmlParserBuilder
生成此输出:
<?xml version="1.0" encoding="utf-8"?>
<test>
<field1>ABC</field1>
</test>
推荐阅读
- javascript - Azure Functions 中断请求循环
- laravel - 背包 CRUD 控制器:根据正在编辑的模型显示字段
- python - timedelta 不适用于 isoformat 时间 python
- javascript - 停止自定义事件的所有嵌套承诺
- xml - 使用变量嵌套修改 XML
- javascript - 对于不工作且不为 contador_NA 变量增加价值
- c# - 使用 c# 代码更改 webbrowser 控件的背景颜色在 Windows 10 上不起作用
- android - 如何将日期和时间从java存储到数据库
- ruby-on-rails - 如何在Ruby on Rails中按月分组记录
- vb.net - 如何在一个水晶报表中添加两个数据表?