當前位置:首頁 » 編程語言 » xml轉java

xml轉java

發布時間: 2022-04-18 13:57:33

java用XStream把xml轉換成javabean的問題

xStream可以輕易的將Java對象和xml文檔相互轉換,而且可以修改某個特定的屬性和節點名稱,而且也支持json的轉換;它們都完美支持JSON,但是對xml的支持還不是很好。一定程度上限制了對Java對象的描述,不能讓xml完全體現到對Java對象的描述。這里將會介紹xStream對JSON、XML的完美支持。xStream不僅對XML的轉換非常友好,而且提供annotation註解,可以在JavaBean中完成對xml節點、屬性的描述。以及對JSON也支持,只需要提供相關的JSONDriver就可以完成轉換。

❷ java怎樣讀取解析xml文件中的數據轉換成java對象

SAXBuildersb=newSAXBuilder();//建立構造器
Documentdoc;
try{
doc=sb.build("E:/userinfod301.xml");//讀入指定文件
Elementroot=doc.getRootElement();//獲得根節點
Listlist=root.getChildren();//將根節點下的所有ObjectInstance子節點放入List中
for(inti=0;i<list.size();i++){
List<Element>listNext=((Element)list.get(i)).getChildren();//將ObjectInstance節點下的所有Attribute放入List中
for(intj=0;j<listNext.size();j++){
Elementsub=(Element)listNext.get(j);//取得節點實例
System.out.println(sub.getAttribute("name").getValue());
System.out.println(sub.getText());
}
}
}catch(Exceptione){
e.printStackTrace();
}

❸ 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 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樹形結構,直接讀取屬性值,非常簡單的。然後你建立一個類,構建對象把這個屬性賦值給對象屬性。

❺ 如何把這段xml轉換成java中的string

如果你要把這個xml轉成javabean的話可以寫個類 既然都已經是String類型了就直接wirte吧

❻ 如何把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();
}
}

❼ 如何將xml文件轉變成java對象

首先 java是面向對象的編程語言,所以你要理解面向對象的思想。在這個前提下我們可以理解 文件 本身就是java的對象File,而xml只是File類中對象的一種實例。你可以創建一個File 把你的xml的路徑傳入這個對象的有參構造,這樣就實例化了一個xml文件類的對象

❽ xml怎麼轉為java對象,急啊!!!!在線等

要自己解析啊,
把xml文本載入進來,一層一層的解析,然後
A a = new A();
a...=...;

❾ 如何創建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方法
}

熱點內容
如何調節安卓手機的內存 發布:2025-01-22 18:49:30 瀏覽:638
佳能相機存儲卡怎麼取消 發布:2025-01-22 18:40:59 瀏覽:568
天貓寶貝上傳 發布:2025-01-22 18:35:09 瀏覽:544
ipad如何登錄金鏟鏟安卓賬號 發布:2025-01-22 18:32:09 瀏覽:319
加密溝通 發布:2025-01-22 18:31:22 瀏覽:555
win7ftp用戶名和密碼設置 發布:2025-01-22 17:46:48 瀏覽:221
三表聯查的sql語句 發布:2025-01-22 17:27:13 瀏覽:418
安卓怎麼解壓分卷壓縮 發布:2025-01-22 17:24:59 瀏覽:721
歐姆龍plc編程語言 發布:2025-01-22 17:21:48 瀏覽:396
和值編程 發布:2025-01-22 17:20:07 瀏覽:518