jaxb xsd生成xml

这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子。 Mohamed解释了如何使用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相关推荐

  1. jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式

    jaxb xsd生成xml 在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演 ...

  2. jaxb解析字符串xml_一个JAXB Nuance:字符串与枚举(受限制的XSD字符串)的枚举

    jaxb解析字符串xml 尽管用于XML绑定的Java体系结构 ( JAXB )在名义情况下(尤其是自Java SE 6以来) 相当容易使用,但它也存在许多细微差别. 一些常见的细微差别是由于无法将 ...

  3. jaxb xml 生成 java_使用 JAXB 工具根据 Java 类生成 XML 模式

    使用 JAXB 工具根据 Java 类生成 XML 模式 2010-06-10 18:24:26|  分类: web service |字号 订阅 关键字: java to xml 使用 JAXB 工 ...

  4. jaxb注解使用_使用JAXB时

    jaxb注解使用 并没有很多例子可以说明这一点,但是如何在应用程序中使用JAXB可以在性能(和内存使用)方面产生巨大差异. 这个例子 在此博客文章中,我将使用一个名为Membership的示例对象,看 ...

  5. jaxb注解使用_使用JAXB的简介

    jaxb注解使用 我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB. 这是令人兴奋和充满挑战的几天. 我想记下我遇到的一些重要事情,以供将来可能会发现有用的任何人使用. 首先,让我 ...

  6. xsd java引用_spring配置文件中xsd引用问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. XML的一些概念 首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namesp ...

  7. eladmin代码自动生成_如何让 Mybatis 自动生成代码

    1 创建代码生成器 1.1 创建Maven项目 1.2 配置 generator.xml 1.3 配置 pom.xml 1.4 使用及测试 2 XML 配置详解 2.1 优先 2.2 官网没有的 &l ...

  8. eladmin代码自动生成_如何让Mybatis自动生成代码

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:阿进的写字台 cnblogs.com/homejim/p/9782403.html ...

  9. Emmet语法(快速生成HTML结构语法、快速生成CSS样式语法)

    1. 快速生成HTML结构语法 生成标签直接输入标签名按tab键即可    比如div然后tab键,就可以生成<div></div> 如果想要生成多个相同标签加上*就可以了   ...

最新文章

  1. STEAM 97%好评,体验堪比《杀戮尖塔》,为什么玩家说这是2020年上半年最超值的游戏?
  2. python基础之运算符
  3. spring boot与spring mvc的区别是什么?
  4. 仿快图系统自带图片浏览器应用源码项目
  5. Pycharm:debug调试时使用参数
  6. 先装vs还是先装sql_【家装话题】装修师先装门还是先装地板?
  7. clientmacaddr进不去系统win10_教你一分钟搞定戴尔电脑WIN10改WIN7
  8. 《大数据》2015年第2期“前沿”——大数据技术发展的十个前沿方向(上)
  9. linux链接器脚本,vmlinux-lds 连接器脚本
  10. [转][Android]Android数据的四种存储方式
  11. linux下搭建radius服务器,linux搭建freeradius服务器
  12. RPA机器人自动调用U盾方案
  13. [Python36] 01 start
  14. 推荐一些Mac上比较好用的软件
  15. 特殊符号html怎么打出来的,特殊符号怎么打出来
  16. 银河帝国----基地前奏
  17. 如何在Google表格中直接使用Google翻译
  18. MySQL查询语句练习题(面试时可能会遇到哦!)
  19. signature=06503812625e47e9ee33634e47a778e8,Title page for ETD etd-07242013-155857
  20. c语言16进制转换成文本显示,文本如何转换成16进制字节集数据

热门文章

  1. springboot访问jsp页面变成直接下载?
  2. LinkedHashSet VS HashSet
  3. 表单中去掉重置和提交按钮和搜索框
  4. 2016蓝桥杯省赛---java---B---6(方格填数)
  5. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)
  6. 联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑CPU测试评测-ZOL中关村在线...
  7. 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C内存多大
  8. 类的继承python 简明_[简明python教程]学习笔记2014-05-04
  9. 萤石云好友分享的监控怎么看_萤石S1:英超赛场上雄起的中国品牌
  10. tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)