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