四种XML解析方法:
(1)Dom生成和解析XML文档
*解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
* 优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
* 缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
* 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
(2)SAX生成和解析XML文档
* SAX ,事件驱动。
* 当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
* 优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
* 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;
* 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
* 使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
(3)DOM4J生成和解析XML文档
* DOM4J 是一个非常非常优秀的Java XML API,
* 具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
* 如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
(4)JDOM生成和解析XML
*为减少DOM、SAX的编码量,出现了JDOM;
*优点:20-80原则,极大减少了代码量。
*使用场合:要实现的功能简单,如解析、创建等,
*但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
首先编写一个要解析的test.xml文件
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <employees>
- <employee>
- <name>wxyfree</name>
- <age>30</age>
- </employee>
- <employee>
- <name>freewxy</name>
- <age>22</age>
- </employee>
- </employees>
然后,编写一个XMLDocument接口
- public interface XMLDocument {
-
- public void createXML(String fileName);
-
- public void parseXML(String fileName);
- }
一、
二、
- package review.testXML;
-
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
-
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
-
- import org.xml.sax.Attributes;
- import org.xml.sax.HandlerBase;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
-
- public class SaxDemo implements XMLDocument{
-
- @Override
- public void createXML(String fileName) {
- System.out.println("<<"+fileName+">>");
-
- }
-
- @Override
- public void parseXML(String fileName) {
- SAXParserFactory saxfac=SAXParserFactory.newInstance();
- try {
- SAXParser saxParser=saxfac.newSAXParser();
- InputStream ins=new FileInputStream(fileName);
- saxParser.parse(ins,new MySAXHandler());
- } catch (ParserConfigurationException e) {
- System.out.println(e.getMessage());
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- } catch (FileNotFoundException e) {
- System.out.println(e.getMessage());
- } catch (IOException e) {
- System.out.println(e.getMessage());
- }
-
- }
-
- public static void main(String[] args) {
- SaxDemo s=new SaxDemo();
- s.parseXML("conf/test.xml");
- }
- }
- class MySAXHandler extends DefaultHandler{
- boolean hasAttribute=false;
- Attributes attributes=null;
-
-
- public void startDocument()throws SAXException{
- System.out.print("文档开始打印了");
- }
-
- public void endDocument()throws SAXException{
- System.out.print("文档开始结束了");
- }
-
- public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
- if(qName.equals("employees")){return;}
- if(qName.equals("employee")){
- System.out.print(qName);
- }
- if(attributes.getLength()>0){
- this.attributes=attributes;
- this.hasAttribute=true;
- }
- }
-
- public void endElement(String uri,String localName,String qNaqme)throws SAXException{
- if(hasAttribute&&(attributes!=null)){
- for(int i=0;i<attributes.getLength();i++){
- System.out.print(attributes.getQName(0)+attributes.getValue(0));
- }
- }
- }
-
- public void characters(char[] ch,int start,int length)throws SAXException{
- System.out.print(new String(ch,start,length));
- }
- }
三、
- package review.testXML;
-
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Iterator;
-
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
-
- public class Dom4jDemo implements XMLDocument{
-
- @Override
- public void createXML(String fileName) {
- Document document = DocumentHelper.createDocument();
- Element employees=document.addElement("employees");
- Element employee=document.addElement("employee");
- Element name=employee.addElement("name");
- name.setText("wxy");
- Element sex=employee.addElement("sex");
- name.setText("f");
- Element age=employee.addElement("age");
- name.setText("29");
- try {
- Writer fileWriter=new FileWriter(fileName);
- XMLWriter xmlWriter=new XMLWriter(fileWriter);
- xmlWriter.write(document);
- xmlWriter.close();
- } catch (IOException e) {
- System.out.println(e.getMessage());
- }
- }
-
- @Override
- public void parseXML(String fileName) {
- File inputXML=new File(fileName);
- SAXReader saxReader=new SAXReader();
- try {
- Document document=saxReader.read(inputXML);
- Element employees=document.getRootElement();
- for(Iterator i=employees.elementIterator();i.hasNext();){
- Element employee=(Element)i.next();
- for(Iterator j=employee.elementIterator();j.hasNext();){
- Element node=(Element)j.next();
- System.out.println(node.getName()+":"+node.getText());
- }
- }
- } catch (DocumentException e) {
- System.out.println(e.getMessage());
- }
- System.out.println("dom4j parserXML");
- }
-
-
- public static void main(String[] args) {
- Dom4jDemo d=new Dom4jDemo();
- d.parseXML("conf/test.xml");
- }
-
- }
四、
- package review.testXML;
-
-
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.List;
-
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.JDOMException;
- import org.jdom.input.SAXBuilder;
- import org.jdom.output.XMLOutputter;
-
-
- public class JDomDemo implements XMLDocument{
-
-
- @Override
- public void createXML(String fileName) {
- Document document;
- Element root;
- root=new Element("employees");
- document=new Document(root);
- Element employee=new Element("employee");
- root.addContent(employee);
- Element name=new Element("name");
- name.setText("wxywxy");
- employee.addContent(name);
- Element sex=new Element("sex");
- sex.setText("m");
- employee.addContent(sex);
- Element age=new Element("age");
- age.setText("25");
- employee.addContent(age);
- XMLOutputter XMLOut=new XMLOutputter();
- try {
- XMLOut.output(document, new FileOutputStream(fileName));
- } catch (FileNotFoundException e) {
- System.out.println(e.getMessage());
- } catch (IOException e) {
- System.out.println(e.getMessage());
- }
- }
-
- @Override
- public void parseXML(String fileName) {
- SAXBuilder builder=new SAXBuilder(false);
- try {
- Document document=builder.build(fileName);
- Element employees=document.getRootElement();
- List employeeList=employees.getChildren("employee");
- for(int i=0;i<employeeList.size();i++){
- Element employee=(Element)employeeList.get(i);
- List employeeInfo=employee.getChildren();
- for(int j=0;j<employeeInfo.size();j++){
- System.out.println(((Element)employeeInfo.get(j)).getName()+":"+((Element)employeeInfo.get(j)).getText());
- }
- }
- } catch (JDOMException e) {
- System.out.println(e.getMessage());
- } catch (IOException e) {
- System.out.println(e.getMessage());
- }
- }
-
-
- public static void main(String[] args){
- JDomDemo jd=new JDomDemo();
- jd.parseXML("conf/test.xml");
- }
- }
XML 的解析方法
原文:http://www.cnblogs.com/cai170221/p/7339744.html