`

jaxb xml 解析出 list对象

    博客分类:
  • J2EE
 
阅读更多

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

0
0
分享到:
评论

相关推荐

    JAVA JAXB 解析XML嵌套子节点为字符串

    在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...

    jaxb解析xml为对象例子

    在"jaxb解析xml为对象例子"中,我们将探讨如何使用JAXB将XML文件解析为Java对象。首先,我们需要一个XML文件,它包含我们想要映射到Java对象的数据。例如,假设我们有一个名为`employee.xml`的文件,其中包含员工...

    利用JAXB进行xml和javabean之间转换

    通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发效率和代码的可维护性。这篇博客将深入探讨如何利用JAXB进行xml和javabean之间的转换。 首先,我们需要了解JAXB的基本工作原理。JAXB通过元...

    xml格式的字符串转换成List

    当我们需要将XML格式的字符串转换为List对象时,这通常涉及到数据解析的过程。这篇博客“xml格式的字符串转换成List”提供了相关的方法和步骤,以下是对这个主题的详细讲解。 首先,理解XML字符串。XML字符串是由一...

    java XML转成LIST可以转成指定的类数组

    1. **Java XML解析库** 在Java中,有多种库可用于解析XML文件,如DOM(Document Object Model)、SAX(Simple API for XML)和JAXB(Java Architecture for XML Binding)。这里我们主要关注使用JAXB,因为它支持将...

    java list和xml互转例子

    - 将Map对象添加到List中。 以下是大致的代码示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; // Java List转XML public String listToXml(List, ...

    JAXBContext 解析xml

    4. Java对象会反映出XML文档的结构,包括嵌套列表。 通过合理利用JAXBContext,开发者可以高效、方便地处理XML数据,无论是简单的数据结构还是复杂的嵌套列表。这个强大的工具为Java应用程序提供了一种强大且灵活的...

    day2_xml解析

    在`pull解析器封装List对象过程.bmp`中,可能展示了如何将XML解析结果存储到List对象中,这在处理结构化的XML数据时非常有用。 最后,`XML PULL 解析原理.bmp`和`xml解析.ppt`可能提供了关于Pull解析更详细的原理和...

    Java解析XML的四种方法比较

    Java解析XML时,主要有四种方法:DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。这四种方法各有特点,适用于不同的场景...

    android XML文件解析和序列化 demo

    在Android开发中,XML文件广泛用于存储数据、配置文件...这个示例涵盖了XML解析和序列化的基础,帮助开发者理解如何在Android应用中处理XML数据。通过学习这个demo,你可以更好地掌握XML在Android环境中的实际应用。

    map/list集合转化成xml字符串 xml字符串转化成map/list集合

    同样的,你可以创建一个解析器来将XML字符串解析成`List`对象,但你需要知道预期的XML结构以便正确地构建对象。 在实际项目中,通常会有更复杂的XML结构,可能包含嵌套的Map和List,这可能需要递归方法或额外的逻辑...

    JAVA对象序列化保存为XML文件的工具类

    而`XMLDecoder`则相反,它可以解析XML输入流并重建原始的Java对象。这两个工具使得在XML和Java对象之间进行序列化和反序列化变得更加简单。 以下是一个简单的示例,展示了如何使用`ObjectToXMLUtil`工具类将Java...

    AnnotationParseXml:jAXB 解析 Xml

    JAXB(Java Architecture for XML Binding)是Java平台标准版(Java SE)的一部分,它提供了一种方便的方式来映射Java对象到XML,以及从XML反向映射到Java对象。本篇文章将深入探讨JAXB注解解析XML的相关知识。 ###...

    JAXB Unmarshalling @XmlAnyElement

    这个注解的作用是在反序列化过程中,如果遇到无法映射到Java类的XML元素,不会抛出异常,而是将这些元素作为未加工的XML节点添加到对应的Java对象中。 在代码片段中,还提供了一个反序列化后的处理逻辑,即遍历Home...

    jaxb2.0英文文档

    JAXB允许开发者在Java应用程序中使用XML,而无需编写大量的XML解析代码,极大地简化了XML处理。 **核心概念:** 1. **Java类到XML映射(Java Class to XML Mapping)**:JAXB允许你定义Java类,并通过注解或XML绑定...

    JAXB开发步骤

    在反向转换过程中,JAXB读取XML文档,根据注解解析XML结构,并创建相应的Java对象。 JAXB的优势在于自动化和灵活性。它可以极大地简化XML和Java对象之间的转换过程,避免手动编写解析和序列化代码。同时,通过调整...

    Java_XML生成与解析的四种方法

    StAX(Streaming API for XML)是一种新的基于流的XML解析API,它结合了SAX和DOM的优点,提供了一种高效的XML处理方式。与SAX相比,StAX提供了更多的控制机制;与DOM相比,StAX不需要一次性加载整个文档到内存中。 ...

    4种常见的xml解析方法[借鉴].pdf

    StAX提供了一种基于流的、事件驱动的XML解析方式,介于DOM和SAX之间。它允许程序以迭代的方式逐个处理XML事件,比如开始元素、结束元素等,同时不需要像DOM那样构建完整的文档对象模型。这种方式既避免了DOM的高内存...

    JAXB简易教程

    JAXB(Java Architecture for XML Binding)是Java平台中用于XML和Java对象之间转换的一个标准技术。这个简易教程将引导我们了解如何使用JAXB进行XML到Java对象以及Java对象到XML的转换,这对于处理XML数据在Java...

    jaxb与jpa初应用

    现在,如果我们有一个`plan.xml`文件,我们可以使用JAXB将其解析为`Plan`对象,然后利用JPA将这些对象持久化到数据库。同样,也可以从数据库中查询`PlanEntity`,然后用JAXB将其转换为XML文件。 总结起来,JAXB和...

Global site tag (gtag.js) - Google Analytics