jaxb xsd生成xml_使用JAXB从XSD生成XML
jaxb xsd生成xml
(注意:对原始帖子进行了少量编辑以提高可读性)
我们可以使用JAXB使用给定的Schema将Java对象编组为XML,反之亦然。 可以以DTD , XSD或其他格式指定XML模式。
工具“ xjc”可用于从XSD架构生成带注释的Java类。 可以下载Java Web服务开发人员包(WSDP) ,其中包括所需的JAXB实现工具。 在这里,我将阐明如何动态生成XML。
使用的样本XSD是:
– Expense.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="expenseReport" type="ExpenseT" />
<xs:complexType name="ExpenseT"><xs:sequence><xs:element name="user" type="UserT"/><xs:element name="items" type="ItemListT"/></xs:sequence>
</xs:complexType>
<xs:complexType name="UserT"><xs:sequence><xs:element name="userName" type="xs:string" /></xs:sequence>
</xs:complexType>
<xs:complexType name="ItemListT"><xs:sequence><xs:element name="item" type="ItemT" maxOccurs="unbounded"/></xs:sequence>
</xs:complexType>
<xs:complexType name="ItemT"><xs:sequence><xs:element name="itemName" type="xs:string" /><xs:element name="purchasedOn" type="xs:string" /><xs:element name="amount" type="xs:decimal" /></xs:sequence>
</xs:complexType>
</xs:schema>
现在,我们使用xjc工具生成相应的Java类。 对生成的Java类进行适当的注释。 我不会详细介绍类的注释,因为这会使事情变得复杂。
xjc.exe费用.xsd
默认情况下,该命令在名为“ generated”的目录中生成Java类。 xjc可以使用很多选项,并且可以看看使用
xjc-帮助
下面的Main类使用生成的类来创建XML。
– Main.java
package generated;import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.math.BigDecimal;public class Main{public static void main(String[] args) throws JAXBException{ObjectFactory factory = new ObjectFactory();UserT user = factory.createUserT();user.setUserName("Sanaulla");ItemT item = factory.createItemT();item.setItemName("Seagate External HDD");item.setPurchasedOn("August 24, 2010");item.setAmount(new BigDecimal("6776.5"));ItemListT itemList = factory.createItemListT();itemList.getItem().add(item);ExpenseT expense = factory.createExpenseT();expense.setUser(user);expense.setItems(itemList);JAXBContext context = JAXBContext.newInstance("generated");JAXBElement<ExpenseT> element = factory.createExpenseReport(expense);Marshaller marshaller = context.createMarshaller();marshaller.setProperty("jaxb.formatted.output",Boolean.TRUE);marshaller.marshal(element,System.out);}}
在上面的XSD中,我们看到很少声明复杂类型。 这些复杂的类型会生成Java类。 子元素和属性成为该类的属性,并且为它们提供了getter和setter。 不能直接创建此类的实例,即不能对其进行调用。 每当我们编译XSD时,都会生成一个ObjectFactory类-这是用于创建XSD Complex类型的实例的工厂(上述Java类的Lines-17,19,24,27)。
一旦获得实例,便使用该类提供的设置器将相应的数据填充到属性中。 还要注意,复杂元素可以具有许多复杂元素作为类的成员。 在那种情况下,我们使用工厂获取复杂元素的实例,然后使用外部复杂元素的setter。
例如:在上面的XSD中,ExpenseT是一个复杂类型,它由UserT和ItemT列表(ItemListT)组成。 在上面的Java类(第27、28、29行)中,我们正在创建ExpenseT的实例,然后使用设置器设置UserT和ItemListT的值。 通过为工厂调用createExpenseReport()创建RootElement。 方法的名称受根元素名称的影响,并且方法的返回类型和参数类型与根元素的类型相同。
一旦我们为XML中的不同元素(属性)设置了值,现在就可以实际生成XML。 我们必须有一个Marshaller (从Java对象获取XML)或一个Unmarshaller (从XML对象获取Java)。
我们需要一个Marshaller –可以从JAXBContext实例获得。 第31,32行获取Marshaller的实例。 可以为marshaller设置不同的属性,在上面的代码中,我们将jaxb.formatted.output设置为true,这意味着所获得的XML格式正确,使用户可读。
支持的不同属性是:
- jaxb.encoding
- jaxb.formatted.output
- jaxb.schema位置
- jaxb.noNamespaceSchemaLocation
- jaxb.fragment
<instance_of_marshaller> .marshal()是用于生成XML的方法。 它被重载以接受以下输出机制:
- org.xml.sax.ContentHandler
- org.w3c.dom.Node
- javax.xml.transform.Result
- java.io.Writer
- java.io.OutputStream
- javax.xml.stream.XMLStreamWriter
- javax.xml.stream.XMLEventWriter
生成的XML如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><expenseReport><user><userName>Sanaulla</userName></user><items><item><itemName>Seagate External HDD</itemName><purchasedOn>August 24, 2010</purchasedOn><amount>6776.5</amount></item></items>
</expenseReport>
相关文章:
- 带有简单框架教程的Android XML绑定
- 使用XML Pull增强Android XML解析
- 具有Spring和Maven教程的JAX–WS
- Spring 3 RESTful Web服务
翻译自: https://www.javacodegeeks.com/2011/02/jaxb-generate-xml-xsd.html
jaxb xsd生成xml
jaxb xsd生成xml_使用JAXB从XSD生成XML相关推荐
- jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式
jaxb xsd生成xml 在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演 ...
- jaxb解析字符串xml_一个JAXB Nuance:字符串与枚举(受限制的XSD字符串)的枚举
jaxb解析字符串xml 尽管用于XML绑定的Java体系结构 ( JAXB )在名义情况下(尤其是自Java SE 6以来) 相当容易使用,但它也存在许多细微差别. 一些常见的细微差别是由于无法将 ...
- jaxb xml 生成 java_使用 JAXB 工具根据 Java 类生成 XML 模式
使用 JAXB 工具根据 Java 类生成 XML 模式 2010-06-10 18:24:26| 分类: web service |字号 订阅 关键字: java to xml 使用 JAXB 工 ...
- jaxb注解使用_使用JAXB时
jaxb注解使用 并没有很多例子可以说明这一点,但是如何在应用程序中使用JAXB可以在性能(和内存使用)方面产生巨大差异. 这个例子 在此博客文章中,我将使用一个名为Membership的示例对象,看 ...
- jaxb注解使用_使用JAXB的简介
jaxb注解使用 我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB. 这是令人兴奋和充满挑战的几天. 我想记下我遇到的一些重要事情,以供将来可能会发现有用的任何人使用. 首先,让我 ...
- xsd java引用_spring配置文件中xsd引用问题
版权声明:本文为博主原创文章,未经博主允许不得转载. XML的一些概念 首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namesp ...
- eladmin代码自动生成_如何让 Mybatis 自动生成代码
1 创建代码生成器 1.1 创建Maven项目 1.2 配置 generator.xml 1.3 配置 pom.xml 1.4 使用及测试 2 XML 配置详解 2.1 优先 2.2 官网没有的 &l ...
- eladmin代码自动生成_如何让Mybatis自动生成代码
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:阿进的写字台 cnblogs.com/homejim/p/9782403.html ...
- Emmet语法(快速生成HTML结构语法、快速生成CSS样式语法)
1. 快速生成HTML结构语法 生成标签直接输入标签名按tab键即可 比如div然后tab键,就可以生成<div></div> 如果想要生成多个相同标签加上*就可以了 ...
最新文章
- STEAM 97%好评,体验堪比《杀戮尖塔》,为什么玩家说这是2020年上半年最超值的游戏?
- python基础之运算符
- spring boot与spring mvc的区别是什么?
- 仿快图系统自带图片浏览器应用源码项目
- Pycharm:debug调试时使用参数
- 先装vs还是先装sql_【家装话题】装修师先装门还是先装地板?
- clientmacaddr进不去系统win10_教你一分钟搞定戴尔电脑WIN10改WIN7
- 《大数据》2015年第2期“前沿”——大数据技术发展的十个前沿方向(上)
- linux链接器脚本,vmlinux-lds 连接器脚本
- [转][Android]Android数据的四种存储方式
- linux下搭建radius服务器,linux搭建freeradius服务器
- RPA机器人自动调用U盾方案
- [Python36] 01 start
- 推荐一些Mac上比较好用的软件
- 特殊符号html怎么打出来的,特殊符号怎么打出来
- 银河帝国----基地前奏
- 如何在Google表格中直接使用Google翻译
- MySQL查询语句练习题(面试时可能会遇到哦!)
- signature=06503812625e47e9ee33634e47a778e8,Title page for ETD etd-07242013-155857
- c语言16进制转换成文本显示,文本如何转换成16进制字节集数据
热门文章
- springboot访问jsp页面变成直接下载?
- LinkedHashSet VS HashSet
- 表单中去掉重置和提交按钮和搜索框
- 2016蓝桥杯省赛---java---B---6(方格填数)
- mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)
- 联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑CPU测试评测-ZOL中关村在线...
- 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C内存多大
- 类的继承python 简明_[简明python教程]学习笔记2014-05-04
- 萤石云好友分享的监控怎么看_萤石S1:英超赛场上雄起的中国品牌
- tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)