可以通過「FileOutputStream」創建文件實例,之後過「OutputStreamWriter」流的形式進行存儲,舉例:
OutputStreamWriter pw = null;//定義一個流
pw = new OutputStreamWriter(new FileOutputStream(「D:/test.xml」),"GBK");//確認流的輸出文件和編碼格式,此過程創建了「test.xml」實例
pw.write("我是要寫入到xml文件的內容");//將要寫入文件的內容,可以多次write
pw.close();//關閉流
備註:文件流用完之後必須及時通過close方法關閉,否則會一直處於打開狀態,直至程序停止,增加系統負擔。
② java程序中使用xstream方法將實體類轉成xml,實體類中有null值,生成的xml就去除了含有null值的節點!
XStream 用法詳解 java 類與 XML 互換
現在 WEB數據交換的時代,傳送XML目前是一個比較流行的方式,具有統一的規則約束,為實現後台介面提供了一個很方便的實現。
我編寫了一個 接收XML並轉換成所需要的Object類的 小例子,希望能夠對做互聯網數據傳輸、介面調用的朋友有所幫助。
首先要導入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 兩個包;
其次是預備一個 XML 事例
[html] view plain
<config>
<span style="white-space:pre"> </span><client type="8888" osversion="9999" version="123" oemtag="5555" area="areacode"/>
<span style="white-space:pre"> </span><protocol>1.10</protocol>
<span style="white-space:pre"> </span><sign value="asdfasdf"/>
<span style="white-space:pre"> </span><vientiance version="version"/>
</config>
其次 就是 按照 XML節點的順序 從外 到內 編寫 java PO類,此實例的目的是將上面的XML轉換為 AllnewstateRQ 這個實體類,然後從裡面列印出測試數據。
下面依次是 config節點 對應的 AllnewstateRQ類 ; client 節點 對應的 Client 類;sign 節點對應的 Sign類;vientiance 節點 對應的 Vientiance類。
[java] view plain
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("config")
public class AllnewstateRQ {
//當節點下有獨立屬性的時候,需要創建一個獨立的類用來保存節點內的屬性
private Client client = new Client();
private Sign sign = new Sign();
private Vientiance vientiance = new Vientiance();
//當節點下沒有屬性,直接由StringValue的時候可直接創建String類型屬性
private String protocol;
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Sign getSign() {
return sign;
}
public void setSign(Sign sign) {
this.sign = sign;
}
public Vientiance getVientiance() {
return vientiance;
}
public void setVientiance(Vientiance vientiance) {
this.vientiance = vientiance;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(String protocol) {
this.protocol = protocol;
}
}
[java] view plain
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("client")
public class Client {
@XStreamAsAttribute //對屬性值進行註解
private String type;//此時類中的屬性名要和xml內的屬性名相對應
@XStreamAsAttribute
private String osversion;
@XStreamAsAttribute
private String version;
@XStreamAsAttribute
private String oemtag;
@XStreamAsAttribute
private String area;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getOsversion() {
return osversion;
}
public void setOsversion(String osversion) {
this.osversion = osversion;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getOemtag() {
return oemtag;
}
public void setOemtag(String oemtag) {
this.oemtag = oemtag;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
[java] view plain
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("sign") //此處要對應節點的名稱
public class Sign {
@XStreamAsAttribute
private String value;//此處對應節點內屬性名稱
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
[java] view plain
package com.wgq.test09_xml;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("vientiance")
public class Vientiance {
@XStreamAsAttribute
private String version;
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
測試main方法
[java] view plain
package com.wgq.test09_xml;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class TestStream {
public static void main(String[] args) {
String reqXml = getXml();
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(new Class[]{AllnewstateRQ.class,Client.class,Sign.class,Vientiance.class});
Object obj = xs.fromXML(reqXml);
AllnewstateRQ allnewstateRQ = (AllnewstateRQ) obj;
System.out.println(allnewstateRQ.getProtocol());
System.out.println(allnewstateRQ.getClient().getArea());
System.out.println(reqXml);
}
static String getXml(){
StringBuilder str = new StringBuilder();
str.append("")
.append("<config>")
.append("<client type=\"8888\" osversion=\"9999\" version=\"123\" oemtag=\"5555\" area=\"areacode\" />")
.append("<protocol>1.10</protocol>")
.append("<sign value=\"asdfasdf\" />")
.append("<vientiance version=\"version\" />")
.append("</config>")
;
return str.toString();
}
}
輸出結果:
[java] view plain
1.10
areacode
<config><client type="8888" osversion="9999" version="123" oemtag="5555" area="areacode" /><protocol>1.10</protocol><sign value="asdfasdf" /><vientiance version="version" /></config>
③ JAVA 生成xml格式,具體格式如下,請問JAVA方法怎麼寫
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importorg.w3c.dom.*;
importorg.xml.sax.SAXException;
importjavax.xml.parsers.*;
importjavax.xml.transform.*;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.*;
importjavax.xml.xpath.*;
publicclassTest{
publicstaticvoidmain(String[]args){
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
ElementtheBook=null,theElem=null,root=null;
try{
factory.(true);
DocumentBuilderdb=factory.newDocumentBuilder();
Documentxmldoc=db.parse(newFile("Test1.xml"));
root=xmldoc.getDocumentElement();
theBook=(Element)selectSingleNode("/books/book[name='哈里波特']",root);
System.out.println("---查詢找《哈里波特》----");
ElementnameNode=(Element)theBook.getElementsByTagName("price").item(0);
Stringname=nameNode.getFirstChild().getNodeValue();
System.out.println(name);
output(theBook);
System.out.println("=============selectSingleNode(books/book[name='哈里波特'],root)==================");
//---新建一本書開始----
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);
System.out.println("==============================");
//---新建一本書完成----
//---下面對《哈里波特》做一些修改。----
//---查詢找《哈里波特》----
//---此時修改這本書的價格-----
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的書刪除----
NodeListsomeBooks=selectNodes("/books/book[price<10]",root);
System.out.println("---再將所有價格低於10的書刪除---");
System.out.println("---符合條件的書有"+someBooks.getLength()+"本。---");
for(inti=0;i<someBooks.getLength();i++){
someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
}
output(xmldoc);
saveXml("Test1_Edited.xml",xmldoc);
}catch(ParserConfigurationExceptione){
e.printStackTrace();
}catch(SAXExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticvoidoutput(Nodenode){//將node的XML字元串輸出到控制台
=TransformerFactory.newInstance();
try{
Transformertransformer=transFactory.newTransformer();
transformer.setOutputProperty("encoding","gb2312");
transformer.setOutputProperty("indent","yes");
DOMSourcesource=newDOMSource();
source.setNode(node);
StreamResultresult=newStreamResult();
result.setOutputStream(System.out);
transformer.transform(source,result);
}catch(){
e.printStackTrace();
}catch(TransformerExceptione){
e.printStackTrace();
}
}
(Stringexpress,Objectsource){//查找節點,並返回第一個符合條件節點
Noderesult=null;
XPathFactoryxpathFactory=XPathFactory.newInstance();
XPathxpath=xpathFactory.newXPath();
try{
result=(Node)xpath.evaluate(express,source,XPathConstants.NODE);
}catch(XPathExpressionExceptione){
e.printStackTrace();
}
returnresult;
}
(Stringexpress,Objectsource){//查找節點,返回符合條件的節點集。
NodeListresult=null;
XPathFactoryxpathFactory=XPathFactory.newInstance();
XPathxpath=xpathFactory.newXPath();
try{
result=(NodeList)xpath.evaluate(express,source,XPathConstants.NODESET);
}catch(XPathExpressionExceptione){
e.printStackTrace();
}
returnresult;
}
publicstaticvoidsaveXml(StringfileName,Documentdoc){//將Document輸出到文件
=TransformerFactory.newInstance();
try{
Transformertransformer=transFactory.newTransformer();
transformer.setOutputProperty("indent","yes");
DOMSourcesource=newDOMSource();
source.setNode(doc);
StreamResultresult=newStreamResult();
result.setOutputStream(newFileOutputStream(fileName));
transformer.transform(source,result);
}catch(){
e.printStackTrace();
}catch(TransformerExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
}
}
XML:
<?xmlversion="1.0"encoding="GBK"?>
<books>
<book>
<name>哈里波特</name>
<price>10</price>
<memo>這是一本很好看的書。</memo>
</book>
<bookid="B02">
<name>三國演義</name>
<price>10</price>
<memo>四大名著之一。</memo>
</book>
<bookid="B03">
<name>水滸</name>
<price>6</price>
<memo>四大名著之一。</memo>
</book>
<bookid="B04">
<name>紅樓</name>
<price>5</price>
<memo>四大名著之一。</memo>
</book>
</books>
④ java對象如何轉換成xml
js">rt.jar就可以操作xml了,其次是dom4j,別的都沒有什麼名氣
⑤ 如何用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 互換。
下面代碼實現了以下種基本功能:
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 解析xml有哪幾種方式
DOM(Document Object Model)生成和解析XML文檔。由W3C提供的介面,它將整個XML文檔讀入內存,構建一個DOM樹來內對各個節點容(Node)進行操作。
SAX(Simple API for XML)生成和解析XML文檔。SAX不用將整個文檔載入到內存,基於事件驅動的API(Observer模式),用戶只需要注冊自己感興趣的事件即可。
DOM4J生成和解析XML文檔。dom4j是目前在xml解析方面是最優秀的(Hibernate、Sun的JAXM也都使用dom4j來解析XML),它合並了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用於大文檔或流化文檔的基於事件的處理
JDOM生成和解析XML 。 JDOM與DOM非常類似,它是處理XML的純JAVA API,API大量使用了Collections類,且JDOM僅使用具體類而不使用介面。
⑧ xstream如何將java對象轉化成有cdata的xml
實體類要加註解
實體類要加註解
@("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;
}
}