導航:首頁 > 編程語言 > javaobjecttoxml

javaobjecttoxml

發布時間:2022-06-10 06:08:08

java怎麼讀寫xml文件

public List<Student> doReadXML(String path) throws Exception {
List<Student> empvoList = new ArrayList<Student>();

File file = new File(path);
//輸入流對象
FileInputStream fis = new FileInputStream(file);
//jdom解析器
SAXBuilder sb = new SAXBuilder();
Document doc= sb.build(fis);
//獲得XML的根元素
Element root = doc.getRootElement();
//獲得根元素下的所有子元素
List<Element> employees = root.getChildren();
for(int i=0;i<employees.size();i++){
Element employee =employees.get(i);
Student stu= new Student();
String name = employee.getChildText("name");
String sex = employee.getChildText("sex");
String agetemp = employee.getChildText("age");
String home = employee.getChildText("home");
String email = employee.getChildText("email");

stu.setName(name);
stu.setSex(sex);
int age = 0;
if(agetemp.equals("")){
age = 0;
} else {
age = Integer.parseInt(agetemp);
}
stu.setAge(age);
stu.setHome(home);
stu.setEmail(email);
System.out.println(name+"\t"+i);
empvoList.add(stu);
}
return empvoList;
}

Ⅱ xstream如何將java對象轉化成有cdata的xml

實體類要加註解

實體類要加註解
@XStreamAlias("msg")
{

=3196422897798539811L;

@XStreamAsAttribute
privateStringtoUid;
@XStreamAsAttribute
privateStringfromUid;
@XStreamAsAttribute
privateStringflag;
@XStreamAsAttribute
privateStringtime;
@XStreamAlias("content")
privateStringcontent;
@XStreamAlias("user")
privateStringuser;
//省略geter、seter
}
然後寫個工具類
importcom.thoughtworks.xstream.XStream;
importcom.thoughtworks.xstream.io.xml.DomDriver;

publicclassSerializeXmlUtil{

/**
*java對象轉化成xml字元串
*@paramobjjava對象實例
*@returnStringxml字元串
*/
(Objectobj){
//XStreamxstream=newXStream();
//直接用jaxpdom來解釋
//XStreamxstream=newXStream(newDomDriver());
//指定編碼解析器,直接用jaxpdom來解釋
XStreamxstream=newXStream(newDomDriver("utf-8"));
//如果沒有這句,xml中的根元素會是<包.類名>
//或者說:註解根本就沒生效,所以的元素名就是類的屬性
xstream.processAnnotations(obj.getClass());
StringBufferxmlstrbuf=newStringBuffer();
xmlstrbuf.append("<?xmlversion="1.0"?>");
xmlstrbuf.append(" ");
xmlstrbuf.append(xstream.toXML(obj));
returnxmlstrbuf.toString();
}

/**
*將傳入xml字元串轉化為java對象
*@paramxmlstr
*@paramclsxml對應的class類
*@returnTxml對應的class類的實例對象
*調用的方法實例:PersonBeanperson=XmlUtil.toBean(xmlStr,PersonBean.class);
*/
publicstatic<T>TdeSerizalizeFromXml(Stringxmlstr,Class<T>cls)throwsException{
//注意:不是newXstream();否則報錯:java.lang.NoClassDefFoundError:
//org/xmlpull/v1/XmlPullParserFactory
XStreamxstream=newXStream(newDomDriver());
xstream.processAnnotations(cls);
Tobj=(T)xstream.fromXML(xmlstr);
returnobj;
}
}

Ⅲ 我想生成一個xml ,用java ,但不知道參數有多少個。方法應該怎麼寫

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;

public class Test {
public static void main(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
Element theBook=null, theElem=null, root=null;
try {
factory.(true);

DocumentBuilder db=factory.newDocumentBuilder();
Document xmldoc=db.parse(new File("Test1.xml"));
root=xmldoc.getDocumentElement();

//--- 新建一本書開始 ----
theBook=xmldoc.createElement("book");
theElem=xmldoc.createElement("name");
theElem.setTextContent("新書");
theBook.appendChild(theElem);

theElem=xmldoc.createElement("price");
theElem.setTextContent("20");
theBook.appendChild(theElem);

theElem=xmldoc.createElement("memo");
theElem.setTextContent("新書的更好看。");
theBook.appendChild(theElem);
root.appendChild(theBook);
System.out.println("--- 新建一本書開始 ----");
output(xmldoc);
//--- 新建一本書完成 ----

//--- 下面對《哈里波特》做一些修改。 ----
//--- 查詢找《哈里波特》----
theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);
System.out.println("--- 查詢找《哈里波特》 ----");
output(theBook);
//--- 此時修改這本書的價格 -----
theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相當於xpath的".//price"。
System.out.println("--- 此時修改這本書的價格 ----");
output(theBook);
//--- 另外還想加一個屬性id,值為B01 ----
theBook.setAttribute("id", "B01");
System.out.println("--- 另外還想加一個屬性id,值為B01 ----");
output(theBook);
//--- 對《哈里波特》修改完成。 ----

//--- 要用id屬性刪除《三國演義》這本書 ----
theBook=(Element) selectSingleNode("/books/book[@id='B02']", root);
System.out.println("--- 要用id屬性刪除《三國演義》這本書 ----");
output(theBook);
theBook.getParentNode().removeChild(theBook);
System.out.println("--- 刪除後的XML ----");
output(xmldoc);

//--- 再將所有價格低於10的書刪除 ----
NodeList someBooks=selectNodes("/books/book[price<10]", root);
System.out.println("--- 再將所有價格低於10的書刪除 ---");
System.out.println("--- 符合條件的書有"+someBooks.getLength()+"本。 ---");
for(int i=0;i<someBooks.getLength();i++) {
someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
}
output(xmldoc);

saveXml("Test1_Edited.xml", xmldoc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void output(Node node) {//將node的XML字元串輸出到控制台
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("encoding", "gb2312");
transformer.setOutputProperty("indent", "yes");

DOMSource source=new DOMSource();
source.setNode(node);
StreamResult result=new StreamResult();
result.setOutputStream(System.out);

transformer.transform(source, result);
} catch ( e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}

public static Node selectSingleNode(String express, Object source) {//查找節點,並返回第一個符合條件節點
Node result=null;
XPathFactory xpathFactory=XPathFactory.newInstance();
XPath xpath=xpathFactory.newXPath();
try {
result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
} catch (XPathExpressionException e) {
e.printStackTrace();
}

return result;
}

public static NodeList selectNodes(String express, Object source) {//查找節點,返回符合條件的節點集。
NodeList result=null;
XPathFactory xpathFactory=XPathFactory.newInstance();
XPath xpath=xpathFactory.newXPath();
try {
result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}

return result;
}

public static void saveXml(String fileName, Document doc) {//將Document輸出到文件
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");

DOMSource source=new DOMSource();
source.setNode(doc);
StreamResult result=new StreamResult();
result.setOutputStream(new FileOutputStream(fileName));

transformer.transform(source, result);
} catch ( e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

Ⅳ 使用java代碼建立xml 並使用代碼引用dtd,我想在建立過程中引用dtd,怎麼實現,求大神,幫忙。。

使用XStream完成java類與XML互換。下面代碼實現了以下4種基本功能:1.object類型轉換為xml類型,在控制台列印2.xml類型轉換為object類型,在控制台列印3.將object類型轉換為xml類型,並寫入XML文件4.讀取XML文件,載入進相應Object類型====================================================1。載入XStream需要的jar包xstream-1.4.2.jarxpp3_min-1.1.4c.jarxmlpull-1.1.3.1.jar2。創建實體類User.javapackagecom.entity;/***實體類*/publicclassUser{privateStringuserName;privateStringpassWord;privateStringregisteredTime;publicUser(){}publicUser(StringuserName,StringpassWord,StringregisteredTime){this.userName=userName;this.passWord=passWord;this.registeredTime=registeredTime;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetPassWord(){returnpassWord;}publicvoidsetPassWord(StringpassWord){this.passWord=passWord;}publicStringgetRegisteredTime(){returnregisteredTime;}publicvoidsetRegisteredTime(StringregisteredTime){this.registeredTime=registeredTime;}}3。編寫功能實現類packagecom.switcher;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.text.SimpleDateFormat;importjava.util.Date;importcom.entity.User;importcom.thoughtworks.xstream.XStream;/****使用XStream不用任何映射就能實現多數Java對象的序列化。*在生成的XML中對象名變成了元素名,類中的字元串組成了XML中的元素內容。*使用XStream序列化的類不需要實現Serializable介面。*XStream是一種序列化工具而不是數據綁定工具*不能從XML或者XMLSchemaDefinition(XSD)文件生成類。*/publicclassSwitchXML{/**XStream不關心序列化/逆序列化的類的欄位的可見性。*序列化/逆序列化類的欄位不需要getter和setter方法。*序列化/逆序列化的類不需要有默認構造函數。*/privateXStreamxStream=newXStream();privateStringxmlPath="D:/userdata.xml";//1.obj->xml(object類型轉換為xml類型)publicStringprintXML(Useruser){System.out.println("obj->xml");Stringxml=xStream.toXML(user);System.out.println(xml);returnxml;}//2.xml->obj(xml類型轉換為object類型,並列印)publicvoidprintObj(Stringxml){System.out.println("xml->obj");Useru=(User)xStream.fromXML(xml);System.out.println(u.getUserName()+""+u.getPassWord()+""+u.getRegisteredTime());}//3.將object類型轉換為xml類型,並寫入XML文件(其他格式也可以,比如txt文件)publicvoidwriterXML(Useruser){try{FileOutputStreamfs=newFileOutputStream(xmlPath);xStream.toXML(user,fs);}catch(FileNotFoundExceptione){e.printStackTrace();}}//4.讀取XML文件,載入進相應Object類型publicvoidreaderXML(){Useruser=newUser();FileInputStreamfis=null;try{fis=newFileInputStream(xmlPath);}catch(FileNotFoundExceptione){e.printStackTrace();}xStream.fromXML(fis,user);//列印對象信息System.out.println(user.toString());//列印對象的屬性值System.out.println(user.getUserName()+"-"+user.getPassWord()+"-"+user.getRegisteredTime());}publicstaticvoidmain(String[]args){//用戶名Stringusername="admin";//密碼Stringpassword="admin";//注冊時間Datenow=newDate();SimpleDateFormatformat=newSimpleDateFormat("yyyyMMddHHmmss");Stringregisteredtime=format.format(now);Useruser=newUser(username,password,registeredtime);SwitchXMLswitchXML=newSwitchXML();//1.object類型轉換為xml類型,在控制台列印Stringxml=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();}}

Ⅳ 【高分求助】java 中 數組格式的 json 怎麼轉成 xml

首先樓主的json數據有問題。

下面代碼親測,可用,兩個文件放在同級目錄:

Test.java

publicclassTest{

publicstaticvoidmain(String[]args){
ConvertXMLtoJSON();
StringjStr="{"users":{"user":["
+"{"uid":"1","node_id":"2","children":[{"id":"43","value":"14"},{"id":"44","value":"15"}]},"
+"{"uid":"2","node_id":"2","children":[{"id":"45","value":"11"},{"id":"46","value":"11"},{"id":"47","value":"16"}]},"
+"{"uid":"3","node_id":"2","children":{"id":"48","value":"11"}}]}"
+"}";
System.out.println(jsontoXml(jStr));
}

publicstaticStringjsontoXml(Stringjson){
try{
XMLSerializerserializer=newXMLSerializer();
JSONjsonObject=JSONSerializer.toJSON(json);
returnserializer.write(jsonObject);
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}

(){
InputStreamis=Test.class.getResourceAsStream("sample.xml");
Stringxml;
try{
xml=IOUtils.toString(is);
System.out.println(xml);
XMLSerializerxmlSerializer=newXMLSerializer();
JSONjson=xmlSerializer.read(xml);
System.out.println(json.toString(1));
}catch(IOExceptione){
e.printStackTrace();
}
}
}

sample.xml

<?xmlversion="1.0"encoding="utf-8"?>
<o>
<usersclass="object">
<userclass="array">
<eclass="object">
<childrenclass="array">
<eclass="object">
<idtype="string">43</id>
<valuetype="string">14</value>
</e>
<eclass="object">
<idtype="string">44</id>
<valuetype="string">15</value>
</e>
</children>
<node_idtype="string">2</node_id>
<uidtype="string">1</uid>
</e>
<eclass="object">
<childrenclass="array">
<eclass="object">
<idtype="string">45</id>
<valuetype="string">11</value>
</e>
<eclass="object">
<idtype="string">46</id>
<valuetype="string">11</value>
</e>
<eclass="object">
<idtype="string">47</id>
<valuetype="string">16</value>
</e>
</children>
<node_idtype="string">2</node_id>
<uidtype="string">2</uid>
</e>
<eclass="object">
<childrenclass="object">
<idtype="string">48</id>
<valuetype="string">11</value>
</children>
<node_idtype="string">2</node_id>
<uidtype="string">3</uid>
</e>
</user>
</users>
</o>

jar包下載地址參考:http://hanyi366.iteye.com/blog/1162365

Ⅵ 如何用java封裝解析一個多層次的XML文件,急求大神幫助

下面提供了XML解析成實體類,以及實體類轉換成xml的方法。
public class SwitchXML {

private XStream xStream = new XStream();

private String xmlPath = "D:/data.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();

}

Ⅶ 用java實現 xml文件轉實體類

使用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();
}
}

Ⅷ java中怎麼把list的信息寫入到xml

package com.imct.util;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* <title>使用XML文件存取可序列化的對象的類</title>
* <description>提供保存和讀取的方法</description>
* @author 殷晉
* <right>清華大學汽車工程開發研究院@2005</right>
* @version 1.0
* 2005-8-5 16:44:49
*/
public class ObjectToXMLUtil
{
/**
* 把java的可序列化的對象(實現Serializable介面)序列化保存到XML文件裡面,如果想一次保存多個可序列化對象請用集合進行封裝
* 保存時將會用現在的對象原來的XML文件內容
* @param obj 要序列化的可序列化的對象
* @param fileName 帶完全的保存路徑的文件名
* @throws FileNotFoundException 指定位置的文件不存在
* @throws IOException 輸出時發生異常
* @throws Exception 其他運行時異常
*/
public static void objectXmlEncoder(Object obj,String fileName)
throws FileNotFoundException,IOException,Exception
{
//創建輸出文件
File fo = new File(fileName);
//文件不存在,就創建該文件
if(!fo.exists())
{
//先創建文件的目錄
String path = fileName.substring(0,fileName.lastIndexOf('.'));
File pFile = new File(path);
pFile.mkdirs();
}
//創建文件輸出流
FileOutputStream fos = new FileOutputStream(fo);
//創建XML文件對象輸出類實例
XMLEncoder encoder = new XMLEncoder(fos);
//對象序列化輸出到XML文件
encoder.writeObject(obj);
encoder.flush();
//關閉序列化工具
encoder.close();
//關閉輸出流
fos.close();
}
/**
* 讀取由objSource指定的XML文件中的序列化保存的對象,返回的結果經過了List封裝
* @param objSource 帶全部文件路徑的文件全名
* @return 由XML文件裡面保存的對象構成的List列表(可能是一個或者多個的序列化保存的對象)
* @throws FileNotFoundException 指定的對象讀取資源不存在
* @throws IOException 讀取發生錯誤
* @throws Exception 其他運行時異常發生
*/
public static List objectXmlDecoder(String objSource)
throws FileNotFoundException,IOException,Exception
{
List objList = new ArrayList();
File fin = new File(objSource);
FileInputStream fis = new FileInputStream(fin);
XMLDecoder decoder = new XMLDecoder(fis);
Object obj = null;
try
{
while( (obj = decoder.readObject()) != null)
{
objList.add(obj);
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
}
fis.close();
decoder.close();
return objList;
}
}

Ⅸ 字元串在java類中怎麼轉換成xml文件

JXmlSerializable 是一個利用java反射,通過調用對象中所有以get(不區分大小寫)開頭的方法除去getClass方法,生成xml格式,希望與大家分享一下
下面是一個parent對象,包含兩個child對象 生成的xml如下

Child類

1package xmlTest;
2
3import java.io.FileNotFoundException;
4import java.io.IOException;
5import java.io.PrintWriter;
6import java.lang.reflect.InvocationTargetException;
7public class Child extends JXmlSerializable {
8
9 private String _name;
10 private String _sex;
11 private int age;
12
13 public void setAge(int num) {
14 age = num;
15 }
16
17 public int getAge() {
18 return age;
19 }
20
21 public void setName(String name) {
22 _name = name;
23 }
24
25 public void setSex(String sex) {
26 _sex = sex;
27 }
28
29 public String getName() {
30 return _name;
31 }
32
33 public String getSex() {
34 return _sex;
35 }
36
37}
38
Parent類 1package xmlTest;
2
3import java.io.PrintWriter;
4import java.lang.reflect.Array;
5import java.util.*;
6
7public class Parent extends JXmlSerializable {
8
9 private String _name;
10 private String _sex;
11 private LinkedList list = new LinkedList();
12 private Vector vec = new Vector();
13 int age;
14
15 public void setAge(int num) {
16 age = num;
17 }
18
19 public int getAge() {
20 return age;
21 }
22
23 public void setName(String name) {
24 _name = name;
25 }
26
27 public void setSex(String sex) {
28 _sex = sex;
29 }
30
31 public String getName() {
32 return _name;
33 }
34
35 public String getSex() {
36 return _sex;
37 }
38
39 public void addChild(Child child) {
40 list.add(child);
41 vec.add(child);
42 }
43
44 public Child[] getChild() {
45
46 Child[] aa = new Child[vec.size()];
47 // list.toArray(aa);
48 vec.toArray(aa);
49 return aa;
50 }
51
52 public static void main(String[] args) {
53 // TODO Auto-generated method stub
54 try {
55 Parent pat = new Parent();
56 pat.setName("jack");
57 pat.setSex("male");
58 Child child1 = new Child();
59 child1.setName("tom");
60 child1.setSex("male");
61 pat.addChild(child1);
62 Child child2 = new Child();
63 child2.setName("Marie");
64 child2.setSex("female");
65 pat.addChild(child2);
66 pat.getChild();
67 PrintWriter out = new PrintWriter("abc.xml");
68 pat.toXmlSerial(out,0);
69 out.flush();
70
71 } catch (Exception e) {
72 e.printStackTrace();
73 }
74
75 }
76}
類 JXmlSerializable
1package xmlTest;
2
3import java.lang.reflect.Method;
4import java.lang.reflect.InvocationTargetException;
5import java.lang.reflect.Array;
6import java.io.PrintWriter;
7import java.io.IOException;
8public class JXmlSerializable {
9
10 public void toXmlSerial(PrintWriter out, int num)
11 throws InvocationTargetException, IllegalAccessException,
12 IOException {
13 out.write("<?xml version="1.0"?> ");
14 String head = "";
15 for (int i = 0; i < num; i++) {
16 head += " ";
17 }
18 out.write(head + "<" + this.getClass().getName() + "> ");
19 Method[] methods = this.getClass().getMethods();
20 for (int i = 0; i < methods.length; i++) {
21 Class[] paras = methods[i].getParameterTypes();
22 String name = methods[i].getName();
23 if (paras == null || paras.length == 0) {
24 if ((name.substring(0, 3).toLowerCase().equals("get"))
25 && !name.equals("getClass")) {
26 Object obj = methods[i].invoke(this, null);
27 getMethodXmlSerial(out, obj, methods[i], num);
28 }
29 }
30 }
31
32 out.write(head + "</" + this.getClass().getName() + "> ");
33
34 }
35
36 private void getMethodXmlSerial(PrintWriter out, Object obj, Method method,
37 int num) throws InvocationTargetException, IllegalAccessException,
38 IOException {
39 if (obj == null)
40 return;
41 String head = "";
42 for (int i = 0; i <= num; i++) {
43 head += " ";
44 }
45 if (obj.getClass().isArray()) {
46 for (int i = 0; i < Array.getLength(obj); i++) {
47 Object childobj = Array.get(obj, i);
48 if (childobj instanceof JXmlSerializable) {
49 ((JXmlSerializable) childobj).toXmlSerial(out, num + 1);
50 } else {
51 getMethodXmlSerial(out, childobj, method, num);
52 }
53 }
54 } else {
55 out.write(head + " <" + method.getName().substring(3) + "> ");
56 out.write(obj.toString());
57 out.write(" </" + method.getName().substring(3) + "> ");
58 }
59
60 }
61}

編譯出來還可以,能夠達到我的理想。

編譯結果是

1<?xml version="1.0"?>
2<xmlTest.Parent>
3 <Name> jack </Name>
4 <Age> 0 </Age>
5 <Sex> male </Sex>
6<?xml version="1.0"?>
7 <xmlTest.Child>
8 <Name> tom </Name>
9 <Age> 0 </Age>
10 <Sex> male </Sex>
11 </xmlTest.Child>
12<?xml version="1.0"?>
13 <xmlTest.Child>
14 <Name> Marie </Name>
15 <Age> 0 </Age>
16 <Sex> female </Sex>
17 </xmlTest.Child>
18</xmlTest.Parent>
今天看了看java.beans包,發現了兩個好東西,XMLEncoder和XMLDecoder。發現自己以前把從XML存取對象真是太費力氣啦。做了小工具類,以後可以用用了。
1以下是引用片段:
2package com.imct.util;
3import java.beans.XMLDecoder;
4import java.beans.XMLEncoder;
5import java.io.File;
6import java.io.FileInputStream;
7import java.io.FileNotFoundException;
8import java.io.FileOutputStream;
9import java.io.IOException;
10import java.util.ArrayList;
11import java.util.List;
12/** *//**
13 * <title>使用XML文件存取可序列化的對象的類</title>
14 * <description>提供保存和讀取的方法</description>
15 * @author 殷晉
16 * <right>清華大學汽車工程開發研究院@2005</right>
17 * @version 1.0
18 * 2005-8-5 16:44:49
19 */
20public class ObjectToXMLUtil
21{
22 /** *//**
23 * 把java的可序列化的對象(實現Serializable介面)序列化保存到XML文件裡面,如果想一次保存多個可序列化對象請用集合進行封裝
24 * 保存時將會用現在的對象原來的XML文件內容
25 * @param obj 要序列化的可序列化的對象
26 * @param fileName 帶完全的保存路徑的文件名
27 * @throws FileNotFoundException 指定位置的文件不存在
28 * @throws IOException 輸出時發生異常
29 * @throws Exception 其他運行時異常
30 */
31 public static void objectXmlEncoder(Object obj,String fileName)
32 throws FileNotFoundException,IOException,Exception
33 {
34 //創建輸出文件
35 File fo = new File(fileName);
36 //文件不存在,就創建該文件
37 if(!fo.exists())
38 {
39 //先創建文件的目錄
40 String path = fileName.substring(0,fileName.lastIndexOf('.'));
41 File pFile = new File(path);
42 pFile.mkdirs();
43 }
44 //創建文件輸出流
45 FileOutputStream fos = new FileOutputStream(fo);
46 //創建XML文件對象輸出類實例
47 XMLEncoder encoder = new XMLEncoder(fos);
48 //對象序列化輸出到XML文件
49 encoder.writeObject(obj);
50 encoder.flush();
51 //關閉序列化工具
52 encoder.close();
53 //關閉輸出流
54 fos.close();
55 }
56 /** *//**
57 * 讀取由objSource指定的XML文件中的序列化保存的對象,返回的結果經過了List封裝
58 * @param objSource 帶全部文件路徑的文件全名
59 * @return 由XML文件裡面保存的對象構成的List列表(可能是一個或者多個的序列化保存的對象)
60 * @throws FileNotFoundException 指定的對象讀取資源不存在
61 * @throws IOException 讀取發生錯誤
62 * @throws Exception 其他運行時異常發生
63 */
64 public static List objectXmlDecoder(String objSource)
65 throws FileNotFoundException,IOException,Exception
66 {
67 List objList = new ArrayList();
68 File fin = new File(objSource);
69 FileInputStream fis = new FileInputStream(fin);
70 XMLDecoder decoder = new XMLDecoder(fis);
71 Object obj = null;
72 try
73 {
74 while( (obj = decoder.readObject()) != null)
75 {
76 objList.add(obj);
77 }
78 }
79 catch (Exception e)
80 {
81 // TODO Auto-generated catch block
82 }
83 fis.close();
84 decoder.close();
85 return objList;
86 }
87}
88
89
90當然用Beans.instantiate也可以從文件中反序列化初對象
91
92

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

閱讀全文

與javaobjecttoxml相關的資料

熱點內容
准了app月卡可以看什麼 瀏覽:139
雲伺服器開機要開30秒 瀏覽:645
php數組傳遞給js 瀏覽:639
在世紀的轉折點上pdf 瀏覽:856
變頻製冷壓縮機性能實驗 瀏覽:574
印刷哪個app好 瀏覽:366
安卓手機如何查看連接過的wifi密碼 瀏覽:460
chrpythonord 瀏覽:353
android切片 瀏覽:230
前端js調用php 瀏覽:590
文件夾res是什麼 瀏覽:488
linuxput命令 瀏覽:931
智能仿生演算法模擬退火 瀏覽:903
汽車辦解壓能代辦嗎 瀏覽:12
美林程序員 瀏覽:841
安卓如何開網路 瀏覽:730
宿來app什麼時候上線 瀏覽:764
成都python培訓機構好不好 瀏覽:421
mysql查看配置命令 瀏覽:597
v8編譯cmake 瀏覽:965