`
想起要学好java
  • 浏览: 8146 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

XML字符和bean的相互处理

    博客分类:
  • xml
 
阅读更多

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这个类。
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的相互转换。

  • 大小: 33 KB
  • 大小: 17.2 KB
  • 大小: 20.3 KB
  • 大小: 47 KB
  • 大小: 27.4 KB
分享到:
评论

相关推荐

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

    将对象(java bean)转换为xml字符串

    将对象(java bean)转换为xml字符串

    使用dom4j将xml字符串转换成Bean对象

    NULL 博文链接:https://yangyongbyjava.iteye.com/blog/2068636

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    xml转javaBean,javaBean转xml,xml标签大小写问题,CDATA的生成,以及对xml特殊符号的处理

    XML、JAVA、JSON多种方式互相转换

    XML、JAVA、JSON多种方式互相转换,灵活运用高效

    Excel配置表工具,转xml bean及数据

    字节 短整型 整型 长整型 单精度浮点数 双精度浮点数 布尔 字符串 枚举 结构体 数组 二维向量 三维向量 曲线 格式检查校验 支持 范围校验/非空校验/重复值校验/外键校验 生成数据结构及数据的xml java: 枚举 dao ...

    xmltojson有效的方法

    数据很复杂时,JavaScript程序员喜欢把他们作为json串进行处理,后台收到后需要对json字符串进行解析,幸好有JSON-lib,这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

    XML考试系统

    &lt;br&gt;MyString String 操作类 &lt;br&gt;MyXML XML 操作类 &lt;br&gt;运行方法 &lt;br&gt;修改 DataBean 构造函数的数据库连接密码 &lt;br&gt;修改 MyXML 里的 public static String myPath 字符对象 适合你环境的路径 ...

    DWR.xml配置文件说明书(含源码)

    配置文件init部分声明那些用于建立远程bean和在方法调用中转换bean的类.这部分是可选择性配置的,多数情况下可以不必使用它,如果你想定义一个新的creator或者converter那么就必须在部分中声明,but do double check on...

    web bean官方手册(简体中文版+繁体中文版+英文原版)

    不过,Web Bean 拥有它自己独特的特性:比 Seam 还要完善的 typesafe、比 Spring 更 stateful 而没有那么地以 XML 为中心,并且针对于网站和企业级的应用程序上的处理能力比 Guice 完善。 最重要的是,Web Bean 是一...

    JAVA JSP 实现 信息办公 XML考试系统

    考试系统 类 Bean类 Com.gton.bean.* AdminBean 管理员 ResultBean 结果 TestBean 试题 TestsBean 试卷 UserBean 用户 Com.gton.bean.db.* DataBean 数据库操作 ... StringFilter 字符编码过滤器 Com.gton.util.*

    JAVA_API1.6文档(中文)

    javax.xml.crypto.dsig.keyinfo 用来解析和处理 KeyInfo 元素和结构的类。 javax.xml.crypto.dsig.spec XML 数字签名的参数类。 javax.xml.datatype XML/Java 类型映射关系。 javax.xml.namespace XML 名称空间...

    validator的两种框架验证的程序代码—可导入运行

    改动了struts-config.xml里&lt;form-bean&gt;里的type,并设置valid.jsp里的属性类型,validation.xml里的里的name对应struts-config.xml里ation里的path,此外validAction.java里取出表单里元素的值的方法也有变化。

    Spring 3 Reference中文

    4.2.2.1 处理基于XML 的配置元数据. 32 4.2.3 使用容器. 33 4.3 Bean 概述 34 4.3.1 命名bean .. 34 4.3.1.1 在bean 定义外面起别名 35 4.3.2 实例化bean . 36 4.3.2.1 使用构造方法...

    Java核心技术II(第8版)

    10.6 文本文件和字符集 10.6.1 源文件的字符编码 10.7 资源包 10.7.1 定位资源包 10.7.2 属性文件 10.7.3 包类 10.8 一个完整的例子 第六章 高级Swing 6.1 列表 6.1.1 JList构件 6.1.2 列表模式 6.1.3 插入和移除值...

    超级有影响力霸气的Java面试题大全文档

    并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成...

    JAVA编程百例(照着例子更容易!)

    实例34 读写文件(字符操作) 实例35 获取文件信息 实例36 目录操作 实例37 读取随机文件 实例38 操作EXECL文件 实例39 生成PDF文件 实例4 矢量对象操作 实例40 压缩和解压文件 实例41 执行系统命令 实例42 获取...

    spring-scopes:自定义 Spring Bean 范围

    在这两个示例中, scope-name字符串应替换为您将用于引用该范围的字符串,并且CustomScope类应是您添加的范围的类。 Java 配置示例 @Configuration public class ScopeConfig { @Bean public ...

Global site tag (gtag.js) - Google Analytics