在JAXB标准中,@XmlElementWrapper注解表示生成一个包装 XML 表示形式的包装器元素。 此元素主要用于生成一个包装集合的包装器 XML 元素。因此,该注释支持以下两种形式的序列化。
注:@XmlElementWrapper仅允许出现在集合属性上。
第一步:定义将要转化的Java对象
package step1.wrapper;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Customer {
String[] names;
int age;
int id;
//使用@XmlElementWrapper注解后,将会在原xml结点上再包装一层xml
@XmlElementWrapper(name="allnames")
@XmlElement(name="myname")
public String[] getNames() {
return names;
}
public void setNames(String[] names) {
this.names = names;
}
@XmlElement
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@XmlAttribute
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Customer [id=" + id + ",names=" + names + ",age=" + age + "]";
}
}
第二步:编组
package step1.wrapper;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
//Marshaller
public class Object2XmlDemo {
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(100);
customer.setNames(new String[]{"name-a","name-b","name-c"});
customer.setAge(29);
try {
File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
生成的xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<allnames>
<myname>name-a</myname>
<myname>name-b</myname>
<myname>name-c</myname>
</allnames>
</customer>
分享到:
相关推荐
3. **生成JAXB元数据**:有两种方法可以生成元数据,一是手动编写,二是利用JAXB的工具自动生成。例如,你可以使用`xjc`命令行工具,通过XML Schema(XSD)文件自动生成对应的Java类。 4. **创建Unmarshaller和...
6. **定制化绑定**:如果默认的绑定不符合需求,可以通过创建`@XmlAccessorType`, `@XmlType`, `@XmlElementWrapper`, `@XmlSeeAlso`, `@XmlElementRef`等更多的注解来定制转换规则。 在20150914-jaxb-experimental...
JAXB的核心在于`@XmlRootElement`和`@XmlElement`注解。`@XmlRootElement`用于标记一个Java类,表示这个类可以被映射为XML的根元素;`@XmlElement`则用于标记类的属性,表示这些属性将映射为XML元素。 例如,有一个...
在给定的例子中,我们将深入理解如何使用JAXB注解来生成XML。 1. **@XmlType**: 这个注解用于定义类的属性在XML输出中的顺序。在`WriterXml`类中,propOrder 属性指定了"id", "name", "age", "book"这四个属性的...
JAXB2是JAXB的第二个主要版本,引入了更多功能和改进,使其在处理XML数据时更为灵活和高效。在本文中,我们将深入探讨JAXB2如何帮助我们转换Java对象到XML以及XML到Java对象。 1. **JAXB2简介** JAXB2提供了基于...
5. **Handling Collections**: 对于Java集合,如ArrayList或Set,JAXB提供了一种自动处理它们的方法,通过使用`@XmlElementWrapper`和`@XmlElement`注解,可以将集合转换为XML元素的数组或列表。 6. **Custom ...
这些注解如@XmlRootElement、@XmlElement和@XmlElementWrapper告诉JAXB对象的哪些属性应该被转换成XML元素。 当执行对象到XML的转换时,JAXB首先会根据注解解析Java对象的结构,然后生成相应的XML文档。每个Java类...
JAXB使用注解(Annotations)来定义这些类如何映射到XML结构。常见的注解包括: 1. `@XmlRootElement`:标记一个类作为XML文档的根元素。 2. `@XmlElement`:将类的字段映射为XML元素。 3. `@XmlAttribute`:将类的...
- JAXB默认不处理Java集合类型的转换,需要使用`@XmlElementWrapper`注解包裹集合,并使用`@XmlElement`注解标记集合中的元素。 - 为了提高性能,可以缓存`Unmarshaller`和`Marshaller`实例,但需注意线程安全问题。...
`@XmlRootElement`注解表示这是一个可被JAXB处理的根元素,`@XmlElement`表示该字段应该作为XML元素进行序列化或反序列化: ```java @XmlRootElement(name = "student") public class Student { @XmlElement(name ...
Jaxb2引入了新的特性和功能,如注解(Annotation),使得JavaBean到XML的转换更加方便和灵活。 1. **JAXBContext**:这是整个JAXB框架的核心,它负责管理和存储XML/Java绑定信息。通过提供类路径或者包名,我们可以...
4. **注解驱动的绑定**: JAXB支持使用注解来定制Java类和XML之间的映射。例如,`@XmlElementWrapper`用于封装一组元素,`@XmlAttribute`用于将属性映射到Java类的字段。 5. **数据绑定上下文**: `JAXBContext`是...
通过使用`@XmlElementWrapper`、`@XmlAccessorType`等注解,可以定制更复杂的映射规则。 除了基本的注解,JAXB还提供了许多高级功能,如自定义XML命名空间、类型转换、国际化支持、数据绑定到XML Schema等。对于...
JAXB提供了一种自动的方式,通过注解或者绑定文件来定义Java类和XML元素之间的映射关系。一旦建立了这种映射,我们就可以使用`Unmarshaller`来将XML文档解析为Java对象,或使用`Marshaller`将Java对象序列化为XML...
对于集合,可以通过`@XmlElementWrapper`注解来创建一个包含多个元素的XML元素。 7. **处理XML命名空间(Namespaces)** 在处理包含命名空间的XML文档时,可以使用`@XmlElement.Namespace`和`@XmlSchema.Namespace...
- **注解Java Bean**: 使用JAXB注解,可以在Java类和字段上声明它们与XML元素和属性的关系。例如,`@XmlRootElement`注解表示该类对应XML文档的根元素,`@XmlElement`注解表示字段对应XML元素。 ```java @...
1. **对象到XML:** JAXB使用`@XmlElement`、`@XmlAttribute`等注解将Java类的属性映射到XML元素或属性。然后,通过`Marshaller`接口将Java对象转换为XML文档。 2. **XML到对象:** 反之,JAXB利用`Unmarshaller`...
- JAXB处理XML时,会忽略Java对象的私有字段,除非它们带有`@XmlElement`等注解。 - XML属性与Java字段的映射可以通过注解如`@XmlElement`, `@XmlAttribute`, `@XmlRootElement`等进行控制。 - 在处理复杂XML结构...
本篇文章将深入探讨JAXB注解解析XML的相关知识。 ### JAXB概述 JAXB允许开发者通过在Java类上使用注解来定义XML结构,从而简化了XML处理。这种映射机制使得XML序列化和反序列化过程变得更加直观和高效。JAXB的核心...