网站怎么做电子合同,为什麼建网站要先做数据库,wordpress 对话,wordpress媒体库地址修改jaxb xsd生成xml这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子。 Mohamed解释了如何使用JAXB从给定的XSD生成XML 。 #xff08;注意#xff1a;对原始帖子进行了少量编辑以提高可读性#xff09; 我们可以使用JAXB使用给定的Schema将Java对象… 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 version1.0?
xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema
xs:element nameexpenseReport typeExpenseT /
xs:complexType nameExpenseTxs:sequencexs:element nameuser typeUserT/xs:element nameitems typeItemListT//xs:sequence
/xs:complexType
xs:complexType nameUserTxs:sequencexs:element nameuserName typexs:string //xs:sequence
/xs:complexType
xs:complexType nameItemListTxs:sequencexs:element nameitem typeItemT maxOccursunbounded//xs:sequence
/xs:complexType
xs:complexType nameItemTxs:sequencexs:element nameitemName typexs:string /xs:element namepurchasedOn typexs:string /xs:element nameamount typexs: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);JAXBElementExpenseT 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 version1.0 encodingUTF-8 standaloneyes?expenseReportuseruserNameSanaulla/userName/useritemsitemitemNameSeagate External HDD/itemNamepurchasedOnAugust 24, 2010/purchasedOnamount6776.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.htmljaxb xsd生成xml