本文目录
- xstream xml转化成java对象
- xml与java对象的相互转换有几种方式
- 100分求高手帮我将xml文件转为java类
- XML转JAVA对象
- java怎么将XML转成对象
- 如何创建xstream的注解工厂类,将xml转换成java对象
xstream xml转化成java对象
注意事项:
创建接收转换的实体类 里面字段 与 xml节点一一对应。spring 使用 @XStreamAlias("节点") 进行关联。属性名与节点一一对应是很重要的!!!不然 不能正常转换。使用了注解以后,xml节点跟类的属性名不再有关系,但是 注解里面使用的名字就默认是与xml节点对应的。所以保持@XStreamAlias("节点") 里面节点的值与xml 一一对应。
xstream.processAnnotations(需要转化的实体类.class);
实体类 例子:
package com.cmsz.cmup.alipay.model.responses;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
/**
* @Title: AccountResultVO.java
* @Package com.cmsz.cmup.alipay.vo.result
* @Description: alipay返回xml字符串封装对象
* @author yekun
* @date 2015年12月4日 上午10:50:23
*/
@XStreamAlias("alipay")
public class AccountResponseModel {
/** 错误信息 */
@XStreamAlias("error")
private String error;
/** 请求是否成功 */
@XStreamAlias("is_success")
private String isSuccess;
/** 请求参数 */
@XStreamAlias("request")
private Request request;
/** xml节点 */
@XStreamAlias("response")
private Response response;
/** 签名 */
@XStreamAlias("sign")
private String sign;
/** 签名加密方式 */
@XStreamAlias("sign_type")
private String sign_type;
//转换代码
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(实体类.class);
xstream.fromXML(xmlStr);//xml格式的字符串
xml与java对象的相互转换有几种方式
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。 JAXBContext 类提供到 JAXB API 的客户端入口点。它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组、编组和验证。xml与java对象的相互转换有几种方式
100分求高手帮我将xml文件转为java类
奋斗了20个小时,终于完成了,本类无需导入任何额外的包,底层细节全部在本类中完成! 说明,本类通过读入xml文件,并把信息正确分成存入到Guird列表中。通过调用getGuirdList()将返回结果集。要使用其中的某一项,只接到对象中用方法获取即可,希望能够满足楼主的需求!!TransXml.javaimport java.io.*;import java.util.Vector;import java.util.Scanner;import java.io.InputStreamReader;import java.util.LinkedList;public class TransXml{private String xmlAddress;private Vector《Guird》 guir;//表示一级子目录下的Guird向量private FileInputStream inStr;private InputStreamReader inRea; private int whLayer=0;//标志表的层次,为0表示根表,为1表示第一层子表private int whiLab=0;//表示当前标签是第几层boolean isend=false;boolean isguirs=false;boolean isguir=false;StringBuffer str=new StringBuffer();//表示《》中的词String strVul;StringBuffer value=new StringBuffer();//表示具体类容boolean isWorld=false;boolean isValue=false;boolean isSubgu=false;boolean notEnd=true;LinkedList《Guird》 linList;public TransXml(){}public TransXml(String xmlAdd){ guir=new Vector《Guird》(); linList=new LinkedList《Guird》(); this.xmlAddress=xmlAdd; System.out.println("开始读取xml文件"); try{ inStr=new FileInputStream(xmlAddress); inRea=new InputStreamReader(inStr); }catch(IOException e){ System.out.println("Xml文件地址无效"); } System.out.println("开始读取xml文件完成!"); Translate(); }public void Translate(){ Guird theGu=new Guird(); while(notEnd) { int tt=-1; try{ tt=inRea.read(); }catch(IOException e){ System.out.println("字符读取失败!"); } if(tt==-1){//文件已经读完了 notEnd=false; break; } char ch=(char)tt; if(ch==’《’){ //说明,前面如果有类容的话,内容完结 isValue=false;//说明内容已经完了 isWorld=true;//表示下面是《》里德内容 } if(ch==’》’){ isWorld=false;//表示括号内的字符串结束了 strVul=str.toString();//表示当前的目录层次 if(strVul.equalsIgnoreCase("guirds")){//这是配置文件正式开始的标志 isguirs=true; }else if(strVul.equalsIgnoreCase("guird")){//说明已经进入guird类 isguir=true; }else if(strVul.equalsIgnoreCase("id")){//进入id属性 isValue=true; }else if(strVul.equalsIgnoreCase("name")){//进入name属性 isValue=true; }else if(strVul.equalsIgnoreCase("ename")){//进入ename属性 isValue=true; }else if(strVul.equalsIgnoreCase("parentid")){//进入parentid属性 isValue=true; }else if(strVul.equalsIgnoreCase("subguirds")){//进入subguirds属性,说明它还有一个字表 isSubgu=true; linList.addLast(theGu);//做入栈操作,添加到结尾 whLayer++;//原始的值为0,它表示当前操作guird的级数 //那么下面的读取将是新的Guird类,所以要把现在的theGu保存后重新初始化 theGu=new Guird();//初始化,后面接着用 }else if(strVul.equalsIgnoreCase("/guirds")){//这是配置文件结束的标志 isguirs=false;//程序已经阅读完毕XML文件 notEnd=false; }else if(strVul.equalsIgnoreCase("/guird")){//说明已经结束guird类 isguir=false;//说明一条记录已经完成,所以要对其存储 //theGu的属性是在《/标签》前就写入完毕了,那么应该写入上级目录中, //如果是定定及目录,则直接写入给定的Vector if(whLayer》0){//说明还不是根目录 Guird tempguir=linList.getLast(); Vector《Guird》 tempqq=(Vector)tempguir.getSubGuird(); if(tempqq==null){//说明前面的集合为空 tempqq=new Vector(); } tempqq.add(theGu);//集合中增加这一项 tempguir.setSubGuird(tempqq); linList.removeLast();//移动原来的换新的内容 linList.add(tempguir); theGu=new Guird();//重新初始化供后面使用,并不要去改变whLayer值 }else if(whLayer==0){//这说明当前的theGu是指1级子目录, guir.add(theGu);//添加一条记录到Vector theGu=new Guird();// 重新初始化以便下次正确用到 }else{ System.out.println("xml文件标签错误!"); notEnd=false; }}else if(strVul.equalsIgnoreCase("/id")){//结束id属性 isValue=false; theGu.setId(new Integer(value.toString())); value=new StringBuffer();}else if(strVul.equalsIgnoreCase("/name")){//结束name属性 isValue=false; theGu.setName(value.toString()); // System.out.println("这里写入的名字是:"+theGu.getName()); value=new StringBuffer();}else if(strVul.equalsIgnoreCase("/ename")){//结束ename属性 isValue=false; theGu.setEname(value.toString()); value=new StringBuffer();}else if(strVul.equalsIgnoreCase("/parentid")){//结束parentid属性 isValue=false; theGu.setParentId(new Integer(value.toString())); value=new StringBuffer();}else if(strVul.equalsIgnoreCase("/subguirds")){//结束subguirds属性,字表完成 isSubgu=false; //刚刚结束的这个Guird就是whLayer级子目录 //要判断是根类还是那一级子目录 whLayer--;//表示上一级目录 if(whLayer》0){ theGu=linList.getLast();//成为当前节点 //所以当前操作对象又将是刚从LinkedListed中取出的那个 linList.removeLast();//已经用过了,最后一个移除,相当于退栈 } else if(whLayer==0){//根节点下 theGu=linList.getLast(); linList.removeLast(); }else{ notEnd=false;//因为whLayer不可能小于0 System.out.println(xmlAddress+"标签不完整!请检查!"); break; } } strVul=""; str=new StringBuffer();//重新初始化,准备后面使用 } if(isWorld==true){ if((char)tt!=’《’&&(char)tt!=’》’)//因为具有延时性所以要增加这个条件 if(tt!=32&&tt!=9)//它不为空格和Tab,即在xml中标签内的内容将忽略Tab和空格 str.append((char)tt); } if(isValue==true){//当前是类容属性值 if((char)tt!=’《’&&(char)tt!=’》’){ if(tt!=32&&tt!=9)//它不为空格和Tab value.append((char)tt); } } /** * 为什么这里注释掉了,因为前面以当发现value值取到最后一位后就设置isValue为false * 但是要当下一个《/》结尾标签完才会调用value值并进行操作,所以,value不能立刻变为空内容 * 那么当它被使用后,采设置新的对象是可取的 * else{ * value=new StringBuffer();//避免干扰下次 * } */ } try{ inRea.close(); inStr.close(); }catch(IOException e){ System.out.println("流关闭失败!"); }}public Vector getGuirdList(){ return this.guir;//获得最终的子目录列表} /** * 原来写的main方法进行测试,在这里就省略了 */}Xml文件中《guirds》标签中,有几对《guird》标签就会返回几条结果,当然《guird》是指在《guirds》目录下的第一层标签,而其他的二级《guird》标签中的内容则存在相应的List《Guird》 subGuird中。 That’s all !
XML转JAVA对象
你在网上下载一个java的xml文件处理包,然后再查“java解析xml”就会有很多的例程,xml的解析器有很多,都是把XML解析成DOM树形结构,直接读取属性值,非常简单的。然后你建立一个类,构建对象把这个属性赋值给对象属性。
java怎么将XML转成对象
直接转化的就是gson了 就调用tojson()等方法就行了 sax和dom要自己写转化的算法
如何创建xstream的注解工厂类,将xml转换成java对象
本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例。 我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件。如:jdom、dom4j等。虽然他们的功能非常强大,但在使用上还是有点不那么习惯。对于格式比较固定的XML文档,它的结构没有变化或是很少变化,这时将它转换成我们熟悉的Java对象来操作的话,会使工作变得更容易一些,而xstream正好可以满足这一点。 本文所用xstream的版本为:1.4.7 《dependency》 《groupId》com.thoughtworks.xstream《/groupId》 《artifactId》xstream《/artifactId》 《version》1.4.7《/version》 《/dependency》 还是以之前的book XML为例,先上代码。import com.thoughtworks.xstream.annotations.XStreamAlias;import com.thoughtworks.xstream.annotations.XStreamAsAttribute;@XStreamAlias("book")public class Book { // 别名注解,这个别名就是XML文档中的元素名,Java的属性名不一定要与别名一致 @XStreamAlias("name") private String name; @XStreamAlias("author") private String author; // 属性注解,此price就是book的属性,在XML中显示为:《book price="108"》 @XStreamAsAttribute() @XStreamAlias("price") private String price; 省略get和set方法}import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;import com.thoughtworks.xstream.annotations.XStreamImplicit;@XStreamAlias("books")public class Books { // 隐式集合,加上这个注解可以去掉book集合最外面的《list》《/list》这样的标记 @XStreamImplicit private List《Book》 list; 省略get和set方法}