将xml类型字符串转换成java对象(xstream xml转化成java对象)

2024-02-02 18:20:02 :50

将xml类型字符串转换成java对象(xstream xml转化成java对象)

“将xml类型字符串转换成java对象”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看将xml类型字符串转换成java对象(xstream xml转化成java对象)!

本文目录

xstream xml转化成java对象

注意事项:

  1. 创建接收转换的实体类 里面字段 与 xml节点一一对应。spring 使用 @XStreamAlias("节点") 进行关联。属性名与节点一一对应是很重要的!!!不然 不能正常转换。使用了注解以后,xml节点跟类的属性名不再有关系,但是 注解里面使用的名字就默认是与xml节点对应的。所以保持@XStreamAlias("节点")  里面节点的值与xml 一一对应。

  2. 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方法}

关于将xml类型字符串转换成java对象和xstream xml转化成java对象的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

将xml类型字符串转换成java对象(xstream xml转化成java对象)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.