jaxb想直接解析出list对象, 不用在list对象上再去包装一层对象
首先定义一个通用的包装对象
<pre>
import java.util.*;
import javax.xml.bind.annotation.XmlAnyElement;
public class Wrapper<T> {
private List<T> items;
public Wrapper() {
items = new ArrayList<T>();
}
public Wrapper(List<T> items) {
this.items = items;
}
@XmlAnyElement(lax=true)
public List<T> getItems() {
return items;
}
}
</pre>
然后是我们的xml
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item item="Check patient name, gender, age" needData="true" >
<Book name="book1" />
<Book name="book2" />
</Item>
<Item item="Check patient name, gender, age" needData="true" >
<Book name="book1" />
<Book name="book2" />
</Item>
</Items>
</pre>
java类
<pre>
@XmlRootElement(name="Item")
public class Item {
private String item;
private boolean needData;
private List<Book> books;
@XmlAttribute(name = "item")
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
@XmlAttribute(name = "needData")
public boolean isNeedData() {
return needData;
}
public void setNeedData(boolean needData) {
this.needData = needData;
}
@XmlElements(value = { @XmlElement(name = "Book", type = Book.class) })
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
@XmlRootElement(name="Book")
public class Book {
private String name;
@XmlAttribute(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
</pre>
jaxb代码
<pre>
private static <T> List<T> unmarshal(javax.xml.bind.Unmarshaller unmarshaller,
Class<T> clazz, String xmlLocation) throws JAXBException {
StreamSource xml = new StreamSource(xmlLocation);
Wrapper<T> wrapper = (Wrapper<T>) unmarshaller.unmarshal(xml,
Wrapper.class).getValue();
return wrapper.getItems();
}
public static <T> List parseXmlToList(Class<T> topLevelClass, String xmlLocation) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Wrapper.class,topLevelClass);
// Unmarshal
Unmarshaller unmarshaller = jc.createUnmarshaller();
List<T> list = unmarshal(unmarshaller, topLevelClass, xmlLocation);
return list;
}
</pre>
最后是客户端代码
<pre>
List<Item> addresses = parseXmlToList(Item.class, "WardCheck.xml");
System.out.println(addresses);
System.out.println(addresses.get(0).getItem());
List<Book> list = addresses.get(0).getBooks();
System.out.println(list.size());
System.out.println(addresses.get(0).getBooks().get(0).getName());
</pre>
来自link http://blog.bdoughan.com/2012/11/creating-generic-list-wrapper-in-jaxb.html
相关推荐
在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...
在"jaxb解析xml为对象例子"中,我们将探讨如何使用JAXB将XML文件解析为Java对象。首先,我们需要一个XML文件,它包含我们想要映射到Java对象的数据。例如,假设我们有一个名为`employee.xml`的文件,其中包含员工...
通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发效率和代码的可维护性。这篇博客将深入探讨如何利用JAXB进行xml和javabean之间的转换。 首先,我们需要了解JAXB的基本工作原理。JAXB通过元...
当我们需要将XML格式的字符串转换为List对象时,这通常涉及到数据解析的过程。这篇博客“xml格式的字符串转换成List”提供了相关的方法和步骤,以下是对这个主题的详细讲解。 首先,理解XML字符串。XML字符串是由一...
1. **Java XML解析库** 在Java中,有多种库可用于解析XML文件,如DOM(Document Object Model)、SAX(Simple API for XML)和JAXB(Java Architecture for XML Binding)。这里我们主要关注使用JAXB,因为它支持将...
- 将Map对象添加到List中。 以下是大致的代码示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; // Java List转XML public String listToXml(List, ...
4. Java对象会反映出XML文档的结构,包括嵌套列表。 通过合理利用JAXBContext,开发者可以高效、方便地处理XML数据,无论是简单的数据结构还是复杂的嵌套列表。这个强大的工具为Java应用程序提供了一种强大且灵活的...
在`pull解析器封装List对象过程.bmp`中,可能展示了如何将XML解析结果存储到List对象中,这在处理结构化的XML数据时非常有用。 最后,`XML PULL 解析原理.bmp`和`xml解析.ppt`可能提供了关于Pull解析更详细的原理和...
Java解析XML时,主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。这四种方法各有特点,适用于不同的场景...
在Android开发中,XML文件广泛用于存储数据、配置文件...这个示例涵盖了XML解析和序列化的基础,帮助开发者理解如何在Android应用中处理XML数据。通过学习这个demo,你可以更好地掌握XML在Android环境中的实际应用。
同样的,你可以创建一个解析器来将XML字符串解析成`List`对象,但你需要知道预期的XML结构以便正确地构建对象。 在实际项目中,通常会有更复杂的XML结构,可能包含嵌套的Map和List,这可能需要递归方法或额外的逻辑...
而`XMLDecoder`则相反,它可以解析XML输入流并重建原始的Java对象。这两个工具使得在XML和Java对象之间进行序列化和反序列化变得更加简单。 以下是一个简单的示例,展示了如何使用`ObjectToXMLUtil`工具类将Java...
JAXB(Java Architecture for XML Binding)是Java平台标准版(Java SE)的一部分,它提供了一种方便的方式来映射Java对象到XML,以及从XML反向映射到Java对象。本篇文章将深入探讨JAXB注解解析XML的相关知识。 ###...
这个注解的作用是在反序列化过程中,如果遇到无法映射到Java类的XML元素,不会抛出异常,而是将这些元素作为未加工的XML节点添加到对应的Java对象中。 在代码片段中,还提供了一个反序列化后的处理逻辑,即遍历Home...
JAXB允许开发者在Java应用程序中使用XML,而无需编写大量的XML解析代码,极大地简化了XML处理。 **核心概念:** 1. **Java类到XML映射(Java Class to XML Mapping)**:JAXB允许你定义Java类,并通过注解或XML绑定...
在反向转换过程中,JAXB读取XML文档,根据注解解析XML结构,并创建相应的Java对象。 JAXB的优势在于自动化和灵活性。它可以极大地简化XML和Java对象之间的转换过程,避免手动编写解析和序列化代码。同时,通过调整...
StAX(Streaming API for XML)是一种新的基于流的XML解析API,它结合了SAX和DOM的优点,提供了一种高效的XML处理方式。与SAX相比,StAX提供了更多的控制机制;与DOM相比,StAX不需要一次性加载整个文档到内存中。 ...
StAX提供了一种基于流的、事件驱动的XML解析方式,介于DOM和SAX之间。它允许程序以迭代的方式逐个处理XML事件,比如开始元素、结束元素等,同时不需要像DOM那样构建完整的文档对象模型。这种方式既避免了DOM的高内存...
JAXB(Java Architecture for XML Binding)是Java平台中用于XML和Java对象之间转换的一个标准技术。这个简易教程将引导我们了解如何使用JAXB进行XML到Java对象以及Java对象到XML的转换,这对于处理XML数据在Java...
现在,如果我们有一个`plan.xml`文件,我们可以使用JAXB将其解析为`Plan`对象,然后利用JPA将这些对象持久化到数据库。同样,也可以从数据库中查询`PlanEntity`,然后用JAXB将其转换为XML文件。 总结起来,JAXB和...