java可以轻松的将xml文件转化为bean对象
这里介绍一个强大的工具jaxb,其实jdk就有这个功能,但是感觉不怎么强大,而且jaxb还可以根据xsd结构来生成对象。有空会介绍
1、javabean对象
@XmlRootElement(name = "beans")
@XmlAccessorType(XmlAccessType.NONE)
public class Beans {
@XmlElement(name = "bean")
private List<Bean> beanList;
public List<Bean> getBeanList() {
return beanList;
}
public void setBeanList(List<Bean> beanList) {
this.beanList = beanList;
}
}
这个是根对象,如果根对象只有1个元素完全可以用@XmlElementWrapper来代替,但是为了更好的扩展我这里使用一般的定义
这个特别注明的是
@XmlAccessorType的默认访问级别是XmlAccessType.PUBLIC_MEMBER,因此,如果java对象中的private成员变量设置了public权限的getter/setter方法,就不要在private变量上使用@XmlElement和@XmlAttribute注解,否则在由java对象生成xml时会报同一个属性在java类里存在两次的错误。同理,如果@XmlAccessorType的访问权限为XmlAccessType.NONE,如果在java的成员变量上使用了@XmlElement或@XmlAttribute注解,这些成员变量依然可以映射到xml文件。
我们这样可以自己控制要生成的对象
@XmlAccessorType(XmlAccessType.NONE)
public class Bean {
@XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "class")
private String className;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
子节点 这里就没什么好说的。
2、具体实现
具体的实现很简单
先看marshaller
public static void marshallerByJaxb(String path, Object object, Class clazz) throws JAXBException, IOException {
JAXBContext jc = JAXBContext.newInstance(clazz);
Marshaller marshaller = jc.createMarshaller();
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(object, file);
}
调用
Beans beans = new Beans();
List<Bean> list = new ArrayList<Bean>();
Bean beanOne = new Bean();
beanOne.setClassName("testClassOne");
beanOne.setId("testIdOne");
Bean beanTwo = new Bean();
beanTwo.setClassName("testClassTwo");
beanTwo.setId("testIdTwo");
list.add(beanOne);
list.add(beanTwo);
beans.setBeanList(list);
XMLTransformed.marshallerByJaxb("test.xml", beans, Beans.class);
最后生成的xml
<beans>
<bean id="testIdOne" class="testClassOne"/>
<bean id="testIdTwo" class="testClassTwo"/>
</beans>
最后看unmarshaller
public static Object unmarshallerByJaxb(String path, Class clazz) throws JAXBException, IOException {
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File file = new File(path);
if (!file.exists()) {
throw new FileNotFoundException("Can not load xml file!");
}
return unmarshaller.unmarshal(file);
}
分享到:
相关推荐
总之,JAXB是Java开发中处理XML的强大工具,通过它可以高效地进行XML与Java对象之间的转换,简化了数据交换过程。熟练掌握JAXB的使用,能大大提高开发效率,并让代码更加简洁、易于维护。在实际项目中,可以结合标签...
3. **转换BEAN到XML**:使用Marshaller的`marshal`方法将BEAN对象转换为XML文档。 ```java Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, ...
例如,一个Web服务可能接收XML请求,然后使用JAXB将其转换为Java对象进行处理,最后再将结果转换为XML响应。 **五、示例代码** ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; ...
总结来说,这个压缩包提供的内容涉及了Java中使用JAXB进行XML与Java对象之间转换的实际应用,以及辅助的DTO和文件读取工具。这些对于理解和实现XML数据处理的Java应用非常有帮助。开发者可以通过学习和使用这些示例...
1. **解析XML**:Java中使用DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)等解析器读取XML文件并将其转化为内存中的对象结构。DOM一次性加载整个XML文档,适合小文件;SAX事件驱动,逐行...
JAXB是Java标准API,它提供了将XML文档与Java对象之间进行自动转换的能力,极大地简化了XML的处理。 首先,我们需要理解JAXB的工作原理。JAXB基于Java反射机制,通过在Java类上使用特定的注解(如@XmlRootElement、...
在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...
总结起来,JAXBUtil通过JAXB API实现了XML与Java对象之间的无缝转换,极大地简化了开发过程。在实际项目中,我们可以根据XML文档结构设计相应的Java Bean类,然后利用`JaxbObjectAndXmlUtil`工具类方便地完成数据的...
在这个"JAXBContext测试Java对象与xml的相互转换Demo"中,我们将深入探讨如何利用JAXBContext实现这一功能。 首先,我们需要定义一个Java类,这个类将被映射为XML文档的元素。例如,我们可以创建一个`Person`类,...
在Java世界中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个过程被称为对象绑定。在处理XML数据时,JAXB提供了一种方便的方式,让我们可以将XML数据...
要使用JAXB,你需要定义一个Java类,该类的字段对应于XML元素,然后使用JAXB提供的API将该对象转换为XML。 以下是一个简单的例子: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller;...
使用JAXB,首先需要创建一个Java Bean类,该类的属性与XML元素相对应。例如,如果XML有如下结构: ```xml <name>John Doe <age>35 <position>Manager ``` 对应的Java Bean类`Employee.java`可能是这样的: ...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...
在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的示例代码,通过查看和运行这些示例,你可以更好地理解如何在实际项目中应用XStream和JAXB进行XML与Java Bean的互转。无论选择哪种方法,都需要注意处理Java...
- **使用JAXB(Java Architecture for XML Binding)**:JAXB是Java标准API,可以自动将Java对象转换为XML和从XML反序列化为Java对象。只需为JavaBean添加适当的注解,然后使用JAXBContext和Marshaller进行转换。 ...
当需要在Java程序中处理XML数据时,JAXB(Java Architecture for XML Binding)提供了一种方便、高效的方法,将Java对象和XML文档之间进行映射,实现了JavaBean与XML之间的自动转换。本篇将深入探讨JAXB2在实现...
总结,XML与JavaBean之间的转换是Java开发中的常见操作,理解XML的大小写规则、特殊符号处理和CDATA的使用对于编写健壮的XML处理代码至关重要。掌握这些知识可以帮助开发者更有效地在XML和Java对象之间进行数据交换...
它是Java EE标准的一部分,提供了一种机制来将Java对象与XML文档相互转换。使用JAXB,可以通过简单的API调用来序列化和反序列化Java对象为XML文档,反之亦然。 **特点:** - **简单易用**:只需在Java类上添加一些...
XMLBean通过XSD(XML Schema Definition)文件将XML结构转换为Java类。这些Java类可以直接用来创建、访问和修改XML文档,就像操作普通Java对象一样。这样,开发者可以避免直接处理复杂的DOM或SAX解析,提高了代码的...
这个“castor-1.3.1-examples.zip”文件包含了一些示例,展示了如何使用Castor进行XML到Bean以及Bean到XML的转换。这个过程在处理XML数据时非常有用,尤其是在数据交换、序列化和持久化场景中。 1. XML到Bean转换:...