java与xml_闲聊下Java与XML互转的N种实现方式

importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.Iterator;importjava.util.List;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.SAXParser;importjavax.xml.parsers.SAXParserFactory;importjavax.xml.stream.XMLOutputFactory;importjavax.xml.stream.XMLStreamWriter;importjavax.xml.transform.Transformer;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;importorg.dom4j.ElementHandler;importorg.dom4j.ElementPath;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;importorg.jdom.JDOMException;importorg.jdom.input.SAXBuilder;importorg.jdom.output.XMLOutputter;importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.NodeList;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;/***

*@authorLove Eat large meat bun

* @TD use the SAX DOM JDOM to build and parser xml file

* @email hejinbin1987@163.com*/

public class Test4XML extends DefaultHandler implementsElementHandler {private String tagName = "";public static final String FILE_PATH = "D://saxText.xml";

@Overridepublic void characters(char[] ch, int start, int length) throwsSAXException {

System.out.println(tagName+ "===SAX===>" + newString(ch, start, length));

}

@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throwsSAXException {

tagName=qName;

}public static voidremoveFile() {

System.out.println("the file have be delete is " + newFile(FILE_PATH).delete());

}

@Overridepublic voidonEnd(ElementPath paramElementPath) {//TODO print node

org.dom4j.Element ele=paramElementPath.getCurrent();

System.out.println(ele.getName()+"===DOM4J====>"+ele.getText());

ele.detach();//after read /root/user node .remove it from memory,avoid out of memory

}

@Overridepublic voidonStart(ElementPath paramElementPath) {

}public void writeXMLByDOM() throwsException {

DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder=buildFactory.newDocumentBuilder();

Document doc=documentBuilder.newDocument();

Element ele= doc.createElement("root");

Element ele1= doc.createElement("user");

ele1.setTextContent("largeMeatBun");

ele.appendChild(ele1);

Element ele2= doc.createElement("email");

ele2.setTextContent("hejinbin1987@163.com");

ele.appendChild(ele2);

doc.appendChild(ele);

DOMSource xmlSource= newDOMSource(doc);

TransformerFactory transFactory=TransformerFactory.newInstance();

Transformer transformer=transFactory.newTransformer();

FileOutputStream outputTarget= newFileOutputStream(FILE_PATH);

transformer.transform(xmlSource,newStreamResult(outputTarget));

outputTarget.close();//the output steam can't auto to close

}public void readerDOMParseXML() throwsException {

DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder=buildFactory.newDocumentBuilder();

FileInputStream file= newFileInputStream(FILE_PATH);

Document document=documentBuilder.parse(file);

file.close();//the xml data have load in memory

Element node =document.getDocumentElement();

NodeList nodelist=node.getChildNodes();for (int i = 0; i < nodelist.getLength(); i++)

System.out.println(nodelist.item(i).getNodeName()+ "===DOM===>" +nodelist.item(i).getTextContent());

}public void writeXMLBySAX() throwsException {//sax writer

OutputStream SAXOut = newFileOutputStream(FILE_PATH);

XMLStreamWriter xmlWrite=XMLOutputFactory.newInstance().createXMLStreamWriter(SAXOut);

xmlWrite.writeStartDocument("utf-8", "1.0");

xmlWrite.writeStartElement("root");

xmlWrite.writeStartElement("user");

xmlWrite.writeCharacters("largeMeatBun");

xmlWrite.writeEndElement();

xmlWrite.writeStartElement("email");

xmlWrite.writeCharacters("hejinbin1987@163.com");

xmlWrite.writeEndElement();

xmlWrite.writeEndElement();

xmlWrite.writeEndDocument();

xmlWrite.close();

SAXOut.close();

}public void parseXMLbySAX() throwsException {//sax parser

InputStream SAXIn = newFileInputStream(FILE_PATH);

SAXParser saxParser=SAXParserFactory.newInstance().newSAXParser();

saxParser.parse(SAXIn,this);

}public org.jdom.Document readXMLByJDOM() throwsException {

FileInputStream JDOMInput= newFileInputStream(FILE_PATH);

org.jdom.Document doc= newSAXBuilder().build(JDOMInput);

org.jdom.Element eleRoot=doc.getRootElement();

List eleJDOMList =eleRoot.getChildren();for(org.jdom.Element eleJDOM : eleJDOMList) {

System.out.println(eleJDOM.getName()+ "====JDOM===>" +eleJDOM.getText());

}returndoc;

}public void writeXMLByJDOM(org.jdom.Document doc) throwsException {

FileOutputStream JDOMOut= newFileOutputStream(FILE_PATH);newXMLOutputter().output(doc, JDOMOut);

JDOMOut.close();

}public org.dom4j.Document readXMLByDOM4J() throwsException {

SAXReader saxReadernew=newSAXReader();

saxReadernew.addHandler("/root/user", this);

org.dom4j.Document docD4J=saxReadernew.read(FILE_PATH);

org.dom4j.Element rootD4E=docD4J.getRootElement();

Iterator iterD4E =rootD4E.elementIterator();while(iterD4E.hasNext()) {

org.dom4j.Element eleD4E=iterD4E.next();

System.out.println(eleD4E.getName()+ "===DOM4J===>" +eleD4E.getText());

}returndocD4J;

}public void writeXMLByDOM4J(org.dom4j.Document docD4J) throwsException {

FileOutputStream DOM4JOut= newFileOutputStream(FILE_PATH);

XMLWriter writer= newXMLWriter(DOM4JOut);

writer.write(docD4J);

DOM4JOut.close();

}public static void main(String[] args) throwsException {/*** dom you can change the implement class any one you like in jaxp.properties*/

//dom writer and parser

Test4XML test4Xml = newTest4XML();

test4Xml.writeXMLByDOM();

test4Xml.readerDOMParseXML();/*** SAX help dochttp://doc.java.sun.com/DocWeb/api/all/javax.xml.stream.XMLStreamWriter

*/removeFile();

test4Xml.writeXMLBySAX();

test4Xml.parseXMLbySAX();/***@see http://www.jdom.org/to find api on jdom web*/org.jdom.Document doc=test4Xml.readXMLByJDOM();

removeFile();

test4Xml.writeXMLByJDOM(doc);/***@see http://www.dom4j.org/

*/org.dom4j.Document docDOM4J=test4Xml.readXMLByDOM4J();

test4Xml.writeXMLByDOM4J(docDOM4J);//removeFile();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值