xml - Grails XML 转换器从文件中添加 XML
问题描述
我正在使用 Grails XML 转换器为某些域类注册自定义 XML 编组器。
有一个类我需要将 XML 从文件附加到目标 XML 中,例如:
<myobject>
<field1>xxx</field1>
<file>
<data>..</data>
...
</file>
</myobject>
其中 field1 在 MyObject 上声明,但文件子树是从文件加载的。
我发现了两种方法,它们都在转义文件子树生成的标签:
<myobject>
<field1>xxx</field1>
<file>
<data>..</data>
...
</file>
</myobject>
这些使用 convertAnother 和 chars 的方法都产生相同的结果:
XML.registerObjectMarshaller(MyObject) { o, xml ->
def _file = new File(o.file_name)
xml.build {
field1(o.field1)
xml.startNode 'file'
//xml.convertAnother vf.text
xml.chars vf.text
xml.end()
}
}
是否可以添加文件的内容但未转义?
解决方案
我发现可行的唯一方法是使用 XML 构建器的内部编写器 API:
我的代码看起来完全像这样:
it.registerObjectMarshaller(Contribution) { contribution, xml ->
xml.attribute 'xsi:type', 'CONTRIBUTION'
xml.build {
uid {
value(contribution.uid)
}
contribution.versions.each { version ->
def xml_version = new File(version.fileLocation).text
// remove any internal xml and namespace declaration
xml_version = xml_version.replaceFirst('<\\?xml version="1.0" encoding="UTF-8"\\?>', '')
xml_version = xml_version.replaceFirst('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', '')
xml_version = xml_version.replaceFirst('xmlns="http://schemas.openehr.org/v1"', '')
// change version for versions
xml_version = xml_version.replaceFirst(/<version( )*/, '<versions ')
xml_version = xml_version.replaceFirst('</version>', '</versions>')
// this is what outputs the exact text in the XML
xml.writer.mode = org.grails.web.xml.XMLStreamWriter.Mode.CONTENT
xml.writer.writer.unescaped().write(xml_version)
}
}
推荐阅读
- c# - WEB API+MVC | 我正在尝试制作一个简单的登录表单,但它不起作用
- machine-learning - 反向传播(Andrew Ng 的 Cousera ML)梯度下降说明
- node.js - Cloud Run - 将压缩文件附加到响应中
- mongodb - 无法安装或删除 mongodb
- java - 为什么静态类不应该存储状态?(爪哇)
- python - setContextProperty() 不会在 qml 文件中创建类实例
- python - 如何创建混淆矩阵来评估模型?
- javascript - 我怎样才能开始 NodeJS 帖子?
- reactjs - Json-server 使用 React js 和 Redux 响应错误 404 not found Post Method
- codeigniter - Codeigniter 完整日历集成