xmltojava的简单介绍
本篇文章给大家谈谈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和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。