XML CSV和纯文本处理
使用Moqui框架有多种方法来生产和消费XML、CSV、JSON和其他文本数据。Groovy有一套很好的API来生产、消费XML:
- groovy.util.Node:此Groovy类表示一个有属性和子节点的树节点。对于XML数据,每个元素被表示为一个节点。
- groovy.util.XmlNodePrinter: 从Node对象树打印XML文本。
- groovy.util.XmlParser: 读取XML文本到一个Node对象树。
- groovy.util.XmlSlurper: 读取XML文本到一个GPathResult对象,它可被用在Groovy中,用类似XPath表达式的语法来取出XML元素树的特定部分。
- groovy.xml.MarkupBuilder: 提供一个Groovy DSL(领域特定语言)来编写类似于XML输出的结构的代码。最适用于明确创建而不是动态构建XML树。
有许多其他的用Java编写的XML库与Moqui一起使用,例如dom4j和JDOM。如果你更喜欢这些,就在Gradle中包含这些JAR文件并编写代码。
对于CSV文件,Moqui使用Apache Commons CSV库,就像XML文件那样,也可以使用其他的库。你可以在 org.moqui.impl.entity.EntityDataLoaderImpl.EntityCsvHandler 类中看到Moqui是如何使用这些的。
在Moqui框架中,报表和导出数据的主要工具是XML表单,特别是列表表单。XML页面和表单可在包括XML、CSV和纯文本等各种模式中渲染。在上下文中或对于web请求用一个请求参数设置renderMode字段来做。这和Moqui配置XML文件中的screen-facade.screen-text-output.type属性像对应,可被设置为在那定义的任何值,包括Moqui默认有的(csv、html、text、xml、xsl-fo)或任意你在运行时Moqui配置XML文件中定义的。
XML表单可能被设置为分页(这是默认的)。要为导出(或任意其他原因)获取所有结果而不是分页结果,设置pageNoLimit字段为true。在某些场景,你会不想渲染任何父页面的内容,避免对要渲染的最终页面进行装饰,可以设置lastStandalone字段为true,意味着最后的页面独立渲染,不包括页面路径中的父页面。这些能在页面动作或web请求的请求参数中被设置。
就像用其他的XML页面和XML表单输出模式,用来产生输出的FTL宏模板能通过包含和覆盖/添加来自定义。用这种方法,你能为一个特定的页面(包括子页面,整个app或app的部分等)或在Moqui中运行的所有东西获得自定义的输出。
有CSV、XML和XSL-FO(PDF)输出选项的页面和表单的详细例子,见列表表单查看/导出示例 章节。