日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jaxb 解析list元素_JAXB和根元素

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jaxb 解析list元素_JAXB和根元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jaxb 解析list元素

@XmlRootElement是人們習慣于與JAXB(JSR-222)一起使用的注釋。 目的是將根元素與類唯一關聯。 由于JAXB類映射到復雜類型,因此一個類有可能對應于多個根元素。 在這種情況下,無法使用@XmlRootElement ,人們開始感到有些困惑。 在本文中,我將演示如何使用@XmlElementDecl映射此用例。

XML模式

下面的XML模式包含三個根元素: customer , billing-address和shipping-address 。 customer元素具有匿名的復雜類型,而billing-address和shipping-address具有相同的命名類型( address-type )。

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/customer" xmlns="http://www.example.org/customer" elementFormDefault="qualified"><xs:element name="customer"><xs:complexType><xs:sequence><xs:element ref="billing-address"/><xs:element ref="shipping-address"/></xs:sequence></xs:complexType></xs:element><xs:complexType name="address-type"><xs:sequence><xs:element name="street" type="xs:string"/></xs:sequence></xs:complexType><xs:element name="billing-address" type="address-type"/><xs:element name="shipping-address" type="address-type"/></xs:schema>

生成模型

下面是從XML模式生成的JAXB模型。 將JAXB批注添加到現有Java模型時,將應用相同的概念。

顧客

JAXB域類對應于復雜類型。 由于customer元素具有匿名復雜類型,因此Customer類具有@XmlRootElement批注。 這是因為只有一個XML元素可以與匿名類型相關聯。

package org.example.customer;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = {"billingAddress","shippingAddress"}) @XmlRootElement(name = "customer") public class Customer {@XmlElement(name = "billing-address", required = true)protected AddressType billingAddress;@XmlElement(name = "shipping-address", required = true)protected AddressType shippingAddress;public AddressType getBillingAddress() {return billingAddress;}public void setBillingAddress(AddressType value) {this.billingAddress = value;}public AddressType getShippingAddress() {return shippingAddress;}public void setShippingAddress(AddressType value) {this.shippingAddress = value;}}

地址類型

同樣,因為JAXB模型類對應于復雜類型,所以會為地址類型的復雜類型生成一個類。 由于此命名的復雜類型可能存在多個根級別元素,因此不會使用@XmlRootElement對其進行注釋。

package org.example.customer;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "address-type", propOrder = {"street"}) public class AddressType {@XmlElement(required = true)protected String street;public String getStreet() {return street;}public void setStreet(String value) {this.street = value;}}

對象工廠

@XmlElementDecl批注用于表示與命名的復雜類型相對應的根元素。 它放在@XmlRegistry注釋的類中的工廠方法上(從XML模式生成時,該類始終稱為ObjectFactory )。 factory方法返回包裝在JAXBElement實例中的域對象。 JAXBElement有一個QName ,表示元素名稱和名稱空間URI。

package org.example.customer;import javax.xml.bind.JAXBElement; import javax.xml.bind.annotation.*; import javax.xml.namespace.QName;@XmlRegistry public class ObjectFactory {private final static QName _BillingAddress_QNAME = new QName("http://www.example.org/customer", "billing-address");private final static QName _ShippingAddress_QNAME = new QName("http://www.example.org/customer", "shipping-address");public ObjectFactory() {}public Customer createCustomer() {return new Customer();}public AddressType createAddressType() {return new AddressType();}@XmlElementDecl(namespace = "http://www.example.org/customer", name = "billing-address")public JAXBElement<AddressType> createBillingAddress(AddressType value) {return new JAXBElement<AddressType>(_BillingAddress_QNAME, AddressType.class, null, value);}@XmlElementDecl(namespace = "http://www.example.org/customer", name = "shipping-address")public JAXBElement<AddressType> createShippingAddress(AddressType value) {return new JAXBElement<AddressType>(_ShippingAddress_QNAME, AddressType.class, null, value);}}

包裝信息

package-info類用于指定名稱空間映射(請參見JAXB和Namespaces )。

@XmlSchema(namespace = "http://www.example.org/customer", elementFormDefault = XmlNsForm.QUALIFIED) package org.example.customer;import javax.xml.bind.annotation.*;

非海警行動

現在我們來看一下解組XML時根元素類型的影響。

customer.xml

下面是一個示例XML文檔,其中有customer作為根元素。 請記住, customer元素具有匿名的復雜類型。

<?xml version="1.0" encoding="UTF-8"?> <customer xmlns="http://www.example.org/customer"><billing-address><street>1 Any Street</street></billing-address><shipping-address><street>2 Another Road</street></shipping-address> </customer>

shipping.xml

這是一個示例XML文檔,其中shipping-address作為根元素。 送貨地址元素具有命名的復雜類型。

<?xml version="1.0" encoding="UTF-8"?> <shipping-address xmlns="http://www.example.org/customer"><street>2 Another Road</street> </shipping-address>

解組演示
?
當解組與用@XmlRootElement注釋的類相對應的XML時,您將獲得域對象的實例。 但是,當解組與用@XmlElementDecl注釋的類相對應的XML時,您將得到包裝在J AXBElement實例中的域對象。 在此示例中,您可能需要使用JAXBElement中的QName來確定是否對帳單地址或收貨地址進行了編組。

package org.example.customer;import java.io.File; import javax.xml.bind.*;public class UnmarshalDemo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance("org.example.customer");Unmarshaller unmarshaller = jc.createUnmarshaller();// Unmarshal CustomerFile customerXML = new File("src/org/example/customer/customer.xml");Customer customer = (Customer) unmarshaller.unmarshal(customerXML);// Unmarshal Shipping AddressFile shippingXML = new File("src/org/example/customer/shipping.xml");JAXBElement<AddressType> je = (JAXBElement<AddressType>) unmarshaller.unmarshal(shippingXML);AddressType shipping = je.getValue();}}

Unmarshal演示– JAXBIntrospector
?
如果您不想記住解組操作的結果是域對象還是JAXBElement ,則可以使用JAXBIntrospector.getValue(Object)方法始終獲取域對象。

package org.example.customer;import java.io.File; import javax.xml.bind.*;public class JAXBIntrospectorDemo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance("org.example.customer");Unmarshaller unmarshaller = jc.createUnmarshaller();// Unmarshal CustomerFile customerXML = new File("src/org/example/customer/customer.xml");Customer customer = (Customer) JAXBIntrospector.getValue(unmarshaller.unmarshal(customerXML));// Unmarshal Shipping AddressFile shippingXML = new File("src/org/example/customer/shipping.xml");AddressType shipping = (AddressType) JAXBIntrospector.getValue(unmarshaller.unmarshal(shippingXML));}}

元帥行動
?
您可以直接將帶有@XmlRootElement注釋的對象編組為XML。 與@XmlElementDecl批注對應的類必須首先包裝在JAXBElement的實例中。 用@XmlElementDecl注釋的工廠方法是最簡單的方法。 如果您是從XML模式生成模型的,則工廠方法位于ObjectFactory類中。

package org.example.customer;import javax.xml.bind.*;public class MarshalDemo {public static void main(String[] args) throws Exception {JAXBContext jc = JAXBContext.newInstance("org.example.customer");Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// Create Domain ObjectsAddressType billingAddress = new AddressType();billingAddress.setStreet("1 Any Street");Customer customer = new Customer();customer.setBillingAddress(billingAddress);// Marshal Customermarshaller.marshal(customer, System.out);// Marshal Billing AddressObjectFactory objectFactory = new ObjectFactory();JAXBElement<AddressType> je = objectFactory.createBillingAddress(billingAddress);marshaller.marshal(je, System.out);}}

輸出量

以下是運行演示代碼的輸出。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customer xmlns="http://www.example.org/customer"><billing-address><street>1 Any Street</street></billing-address> </customer> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <billing-address xmlns="http://www.example.org/customer"><street>1 Any Street</street> </billing-address>

參考: Java XML和JSON綁定博客中的JCG合作伙伴 Blaise Doughan的JAXB和Root Elements 。


翻譯自: https://www.javacodegeeks.com/2012/08/jaxb-and-root-elements.html

jaxb 解析list元素

總結

以上是生活随笔為你收集整理的jaxb 解析list元素_JAXB和根元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 懂色av一区二区 | 久久国产毛片 | 国产精品视频一区二区在线观看 | 四虎影院污 | 久久婷五月 | 日韩电影第一页 | 国产午夜视频在线播放 | 欧美日韩在线成人 | 成人区视频 | 妹子干综合网 | 综合色播 | 天天插综合网 | 人妻体体内射精一区二区 | 在线视频啪| 午夜剧场91| 成全世界免费高清观看 | 91久久中文字幕 | av免费视屏 | 日韩av中字 | 亚洲自拍第二页 | 午夜影视在线观看 | 女人被狂躁c到高潮 | 免费做a爰片77777 | 在线电影一区 | 成年人视频在线免费观看 | www.久久色| www.久久av| 欧美视频在线免费 | 鲁丝一区二区 | 婷婷午夜精品久久久久久性色av | 免费国产黄色片 | 亚洲高清成人 | 欧美黄色特级视频 | 亚洲情侣在线 | 自拍99| 亚洲精品视频在线观看免费 | 日本不卡一区二区三区 | 亚洲经典视频 | 妺妺窝人体色www在线小说 | 日日摸日日添日日碰9学生露脸 | 久操成人 | 亚洲国产一区在线观看 | 黑人粗进入欧美aaaaa | 日韩不卡一区二区三区 | 亚洲精品国产电影 | 夜夜操导航 | 王者后宫yin肉h文催眠 | 美女精品 | 在线免费观看成人 | 深夜福利网| 美女脱得一干二净 | 成人天堂噜噜噜 | 午夜精品小视频 | 男操女视频网站 | 老头糟蹋新婚少妇系列小说 | 玖玖在线观看 | 色人人 | 伊人久久久久久久久久 | 激情欧美一区 | 奇米影音 | 美女又黄又爽 | 久久99精品久久久久 | 97在线国产 | 老妇高潮潮喷到猛进猛出 | 免费观看一区二区三区视频 | 浮力影院国产第一页 | 神马午夜影院 | 中文区中文字幕免费看 | 欧美特黄一级视频 | 啪啪亚洲 | 少妇2做爰bd在线意大利堕落 | 三区在线观看 | 中文区中文字幕免费看 | missav|免费高清av在线看 | 亚洲91视频 | 亚洲第一狼人区 | 国产福利视频一区二区三区 | 8x国产一区二区三区精品推荐 | 国产精品一线天 | 日韩亚州 | 婷婷深爱网 | 肉色丝袜脚交一区二区 | 精品亚洲一区二区三区四区五区 | 久久九九久精品国产免费直播 | 噼里啪啦免费高清看 | 99视频在线观看免费 | 国产精品污www一区二区三区 | 一个色亚洲 | 精品少妇久久久 | 日本高清视频在线 | 国产精品欧美激情 | 激情五月开心婷婷 | 精品在线一区 | 日韩欧美国产一区二区三区在线观看 | 99色99| 动漫涩涩免费网站在线看 | 日美女逼逼 | 国产口爆吞精一区二区 | 国产激情av |