xmltojava的简单介绍

博主:adminadmin 2023-03-19 20:18:05 252

本篇文章给大家谈谈xmltojava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何把xml内容转换为java格式

使用XStream完成 java 类与 XML 互换。

下面代码实现了以下4种基本功能:

1. object类型转换为xml类型,在控制台打印

2. xml类型转换为object类型,在控制台打印

3. 将object类型转换为xml类型,并写入XML文件

4. 读取XML文件,加载进相应Object类型

====================================================

1。加载 XStream 需要的jar包 xstream-1.4.2.jar

xpp3_min-1.1.4c.jar

xmlpull-1.1.3.1.jar

2。创建实体类User.java

package com.entity;

/**

* 实体类

*/

public class User {

private String userName;

private String passWord;

private String registeredTime;

public User() { }

public User(String userName, String passWord, String registeredTime) {

this.userName = userName;

this.passWord = passWord;

this.registeredTime = registeredTime;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassWord() {

return passWord;

}

public void setPassWord(String passWord) {

this.passWord = passWord;

}

public String getRegisteredTime() {

return registeredTime;

}

public void setRegisteredTime(String registeredTime) {

this.registeredTime = registeredTime;

}

}

3。编写功能实现类

package com.switcher;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import com.entity.User;

import com.thoughtworks.xstream.XStream;

/**

*

* 使用 XStream不用任何映射就能实现多数 Java 对象的序列化。

* 在生成的 XML中对象名变成了元素名,类中的字符串组成了 XML中的元素内容。

* 使用 XStream 序列化的类不需要实现 Serializable 接口。

* XStream 是一种序列化工具而不是数据绑定工具

* 不能从XML 或者 XML Schema Definition (XSD) 文件生成类。

*/

public class SwitchXML {

/*

* XStream 不关心序列化/逆序列化的类的字段的可见性。

* 序列化/逆序列化类的字段不需要 getter 和 setter 方法。

* 序列化/逆序列化的类不需要有默认构造函数。

*/

private XStream xStream = new XStream();

private String xmlPath = "D:/userdata.xml";

// 1. obj - xml(object类型转换为xml类型)

public String printXML(User user) {

System.out.println("obj - xml");

String xml = xStream.toXML(user);

System.out.println(xml);

return xml;

}

// 2. xml-obj(xml类型转换为object类型,并打印)

public void printObj(String xml) {

System.out.println("xml - obj");

User u = (User) xStream.fromXML(xml);

System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime());

}

// 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)

public void writerXML(User user) {

try {

FileOutputStream fs = new FileOutputStream(xmlPath);

xStream.toXML(user, fs);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

// 4. 读取XML文件,加载进相应Object类型

public void readerXML() {

User user = new User();

FileInputStream fis = null;

try {

fis = new FileInputStream(xmlPath);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

xStream.fromXML(fis, user);

// 打印对象信息

System.out.println(user.toString());

// 打印对象的属性值

System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"

+ user.getRegisteredTime());

}

public static void main(String[] args) {

// 用户名

String username = "admin";

// 密码

String password = "admin";

// 注册时间

Date now = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

String registeredtime = format.format(now);

User user = new User(username, password, registeredtime);

SwitchXML switchXML = new SwitchXML();

// 1. object类型转换为xml类型,在控制台打印

String xml = switchXML.printXML(user);

System.out.println("---------------------");

// 2. xml类型转换为object类型,在控制台打印

switchXML.printObj(xml);

System.out.println("---------------------");

// 3. 将object类型转换为xml类型,并写入XML文件

switchXML.writerXML(user);

System.out.println("---------------------");

// 4. 读取XML文件,加载进相应Object类型

switchXML.readerXML();

}

}

100分求高手帮我将xml文件转为java类

奋斗了20个小时,终于完成了,本类无需导入任何额外的包,底层细节全部在本类中完成!

说明,本类通过读入xml文件,并把信息正确分成存入到Guird列表中。通过调用getGuirdList()将返回结果集。要使用其中的某一项,只接到对象中用方法获取即可,希望能够满足楼主的需求!!

TransXml.java

import 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 VectorGuird 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;

LinkedListGuird linList;

public TransXml(){

}

public TransXml(String xmlAdd){

guir=new VectorGuird();

linList=new LinkedListGuird();

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(whLayer0){//说明还不是根目录

Guird tempguir=linList.getLast();

VectorGuird 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(whLayer0){

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!=32tt!=9)//它不为空格和Tab,即在xml中标签内的内容将忽略Tab和空格

str.append((char)tt);

}

if(isValue==true){//当前是类容属性值

if((char)tt!=''(char)tt!=''){

if(tt!=32tt!=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标签中的内容则存在相应的ListGuird subGuird中。

That's all !

xstream xml转化成java对象

xml to java对象:

static MessageDatabase load(String persistFile) {

MessageDatabase messageDatabase = null;

Reader reader = null;

try {

reader = new FileReader(persistFile);

XStream xstream = new XStream(new JDomDriver());

messageDatabase = (MessageDatabase) xstream.fromXML(reader);

// for upgrade

if (messageDatabase != null) {

messageDatabase.upgrade();

}

}

catch (FileNotFoundException ex) {

;

}

finally {

if (reader != null) {

try {

reader.close();

}

catch (IOException ex) {

log.warn("Exception when closing reader", ex);

}

}

}

if (messageDatabase == null) {

messageDatabase = new MessageDatabase();

messageDatabase.setMessages(new LinkedList());

messageDatabase.setStickyMessages(new LinkedList());

}

messageDatabase.persistFile = persistFile;

return messageDatabase;

}

关于xmltojava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。