XML字符和java bean的相互转换处理,在项目中经常会用到xml,需要将java bean转换成xml字符,也需要将xml字符转换成java bean。下面直接用代码介绍jdk自带的JAXBContext如何处理xml和bean的相互转换。是一种比较简单的处理方式。
/**
* 将xml字符转换成java对象
* @param xmlStr
* @param T
* @return
*/
@SuppressWarnings({"rawtypes", "unchecked"})
private static <T> T xmlStringToBean(String xmlStr, Class T) throws Exception {
JAXBContext context = JAXBContext.newInstance(T);
Unmarshaller unmarshaller = context.createUnmarshaller();
return (T)unmarshaller.unmarshal(new StringReader(xmlStr));
}
/**
* 将java bean 转换成xml字符串
* @param jaxbElement
* @param classesToBeBound
* @return
* @throws Exception
*/
@SuppressWarnings("rawtypes")
private static String beanToXMLStr(Object jaxbElement, boolean isFormatted, Class... classesToBeBound) throws Exception {
JAXBContext context = JAXBContext.newInstance(classesToBeBound); // 获取上下文对象
Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 设置编码字符集
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, isFormatted); // 格式化XML输出,有分行和缩进
ByteArrayOutputStream baos = new ByteArrayOutputStream();
marshaller.marshal(jaxbElement, baos);
String xmlStr = new String(baos.toByteArray()); // 生成XML字符串
return xmlStr;
}
/**
* 将xml字符串写入到文件里
* @param xmlStr
* @throws Exception
*/
private static void writeXmlStrToFile(String xmlStr) throws Exception {
FileOutputStream fos = new FileOutputStream("F:\\xml\\userbean.xml");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write(xmlStr);
bw.flush();
bw.close();
fos.close();
}
上面三个方法就可以实现xml和bean的相互转换,以及将xml写入文件中。
具体的bean定义也是有一定的形式要求的,如下:
如上四个图所示,要转换成xml字符串的是UserBean这个类。
如上四个图所示,要转换成xml字符串的是UserBean这个类。
1、@XmlRootElement(name = "userBean") 这是定义xml的根元素。
2、userPhones定义了一个UserPhones的类,而不是直接在UserBean里直接定义List<UserPhone> userPhone,这是因为直接定义集合的话,生成的xml将无法体现成集合的上下级形式。
3、@XmlElement(name = "user_address") 这里是定义xml的一个元素,可以指定元素名。
4、@XmlAttribute 这里定义成这个,是将bean里的这个属性以xml根元素的一个属性的形式显示。
测试类:
public static void main(String[] args) {
UserPhone userPhone1 = new UserPhone(1, "13256899658");
UserPhone userPhone2 = new UserPhone(2, "0755123456");
List<UserPhone> userPhoneList = new ArrayList<>();
userPhoneList.add(userPhone1);
userPhoneList.add(userPhone2);
UserPhones userPhones = new UserPhones(userPhoneList);
UserAddress userAddress = new UserAddress("南山区白石洲", "南山区高新园");
UserBean userBean = new UserBean("1.0.0", "核核", 28, userPhones, userAddress);
try {
String xmlStr = beanToXMLStr(userBean, true, UserBean.class, UserPhones.class, UserAddress.class, UserPhone.class);
System.out.println(xmlStr);
UserBean bean = xmlStringToBean(xmlStr, UserBean.class);
System.out.println(bean.toString());
for(UserPhone phone : bean.getUserPhones().getUserPhone()) {
System.out.println(phone);
}
writeXmlStrToFile(xmlStr);
System.out.println("write xml success");
} catch (Exception e) {
e.printStackTrace();
}
}
输出内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <userBean version="1.0.0"> <age>28</age> <name>核核</name> <user_address> <homeAddress>南山区白石洲</homeAddress> <workAddress>南山区高新园</workAddress> </user_address> <userPhones> <userPhone> <num>13256899658</num> <type>1</type> </userPhone> <userPhone> <num>0755123456</num> <type>2</type> </userPhone> </userPhones> </userBean> version = 1.0.0 name = 核核 age = 28 userAddress = homeAddress = 南山区白石洲 workAddress = 南山区高新园 type = 1 num = 13256899658 type = 2 num = 0755123456 write xml success
以上就是xml和bean的相互转换。
相关推荐
当我们需要将XML字符串解析并映射到Java Bean对象时,dom4j是一个常用的库。本篇文章将详细探讨如何使用dom4j库实现这个过程。 首先,dom4j是一个强大的Java XML API,它提供了丰富的功能,如读取、写入、修改和...
2. **转换为XML**:使用JAXB的Marshaller将Bean转换为XML字符串或写入文件。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import java.io.File; public class WebController { ...
xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...
在Java开发中,有时我们需要将Java Bean对象转换成XML字符串,以便于数据交换或存储。XStream库就是这样一个工具,它提供了一种简单且高效的方式来实现这个目标。XStream不仅能够将Java对象转换为XML,还可以反向将...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...
使用`org.apache.xmlbeans.XmlObject.Factory.parse()`方法,传入XML字符串或XML文件,生成XMLBean对象。 4. **XMLBean的优势**: - 高效:XMLBean提供了高效的XML解析和生成性能。 - 类型安全:由于基于XSD,...
`xmlToBean()` 方法用于将XML字符串解析为对应的Java Bean对象,而`beanToXml()` 方法则将Bean对象转换为XML字符串。 在`xmlToBean()` 方法中,首先需要实例化xStream,并设置其转换器配置。这通常包括设置命名空间...
- 使用`toXML()`方法将Java Bean转换为XML字符串。 - 使用`fromXML()`方法将XML字符串转换为Java Bean。 3. **示例**: ```java import com.thoughtworks.xstream.XStream; public class XStreamDemo { ...
通过调用Castor提供的序列化方法,你可以将Java对象转换为XML字符串或直接写入XML文件。这样,Java对象的数据就以XML的形式存储或传输,易于读取和处理。 3. Castor的核心功能: - 数据绑定:Castor的核心是其数据...
在XML配置文件中,如Spring框架的bean配置,或者在XML文档存储用户输入时,都需要特别注意特殊字符的处理,以避免解析错误或安全问题,如跨站脚本攻击(XSS)。 总结来说,理解并正确处理XML特殊字符是XML编程中的...
在Java开发中,数据对象(通常称为Bean)与XML之间的转换是常见的需求,尤其是在处理配置文件、序列化或网络通信时。Betwixt是一个Apache软件基金会提供的库,专门用于XML与Java对象之间的绑定,使得我们可以方便地...
Java中的JAXB(Java Architecture for XML Binding)是一个用于在Java...这些对于理解和实现XML数据处理的Java应用非常有帮助。开发者可以通过学习和使用这些示例,更好地掌握JAXB的工作机制,提高处理XML数据的效率。
同样,也可以通过`Unmarshaller.unmarshal()`方法的其他重载版本来处理XML字符串或Reader等不同输入源。 总结起来,Java的JAXB框架提供了从XML到Java Bean的自动映射功能,极大地简化了处理XML数据的工作。通过定义...
这样,开发者可以通过调用对象的方法来访问和修改XML数据,无需手动解析XML字符串。 2. **Java对象到XML的序列化**:相反,XMLBean也支持将Java对象转换为XML文档。通过调用对象的相关方法,可以将内存中的Java对象...
4. **Marshalling**: 使用`Marshaller`对象将Java Bean实例转换为XML字符串或写入文件。 5. **Unmarshalling**: 使用`Unmarshaller`对象将XML字符串或文件解析回Java Bean实例。 6. **绑定文件(bindings file)**...
- 转换和序列化:可以将XMLBean对象转换为XML字符串,或者将XML字符串反序列化为Java对象。 - 验证:XMLBean可以验证XML文档是否符合其对应的XML Schema。 5. 性能和效率: - XMLBean虽然提供了丰富的功能,但...
XML(Extensible Markup Language)和Java Bean是两种在软件开发中常见的数据表示和处理方式。XML是一种用于存储和传输结构化数据的标记语言,而Java Bean是Java编程中的一种组件模型,它代表了对象的封装,通常用于...
在Java开发中,XML(可扩展标记语言)和Bean对象之间的转换是一项常见的任务,尤其是在处理配置文件、数据交换或序列化时。标题“任意深度xml与bean的互转”涉及的技术点是关于如何处理任意层次结构的XML文档,并将...
1. xstream-1.4.jar:这是XStream的主要库文件,包含了所有必要的类和方法,用于实现XML和Java对象的相互转换。 2. kxml2-2.3.0.jar:这是一个轻量级的XML解析器,常被XStream用来作为XML读写的底层实现。KXML2提供...
通过Apache CXF框架创建Web服务,并结合Spring框架进行管理,从而能够灵活地返回不同类型的数据,包括List、自定义Bean对象、纯文本String以及常见的数据交换格式JSON和XML。这种集成方式使得服务端能够更加便捷地...