日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Java解析XML的四種方法

XML現(xiàn)在已經(jīng)成為一種通用的數(shù)據(jù)交換格式,它的平臺無關(guān)性,語言無關(guān)性,系統(tǒng)無關(guān)性,給數(shù)據(jù)集成與交互帶來了極大的方便。對于XML本身的語法知識與技術(shù)細(xì)節(jié),需要閱讀相關(guān)的技術(shù)文獻(xiàn),這里面包括的內(nèi)容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具體可參閱w3c官方網(wǎng)站文檔http://www.w3.org獲取更多信息。

成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎng)營銷等。成都創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,成都創(chuàng)新互聯(lián)公司核心團(tuán)隊十年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

XML在不同的語言里解析方式都是一樣的,只不過實現(xiàn)的語法不同而已?;镜慕馕龇绞接袃煞N,一種叫SAX,另一種叫DOM。SAX是基于事件流的解析,DOM是基于XML文檔樹結(jié)構(gòu)的解析。假設(shè)我們XML的內(nèi)容和結(jié)構(gòu)如下: 

 


ddviplinux
m
30

本文使用JAVA語言來實現(xiàn)DOM與SAX的XML文檔生成與解析。
首先定義一個操作XML文檔的接口XmlDocument 它定義了XML文檔的建立與解析的接口。

package com.alisoft.facepay.framework.bean; 
/**
*
* @author hongliang.dinghl
* 定義XML文檔建立與解析的接口
*/
public interface XmlDocument {
/**
* 建立XML文檔
* @param fileName 文件全路徑名稱
*/
public void createXml(String fileName);
/**
* 解析XML文檔
* @param fileName 文件全路徑名稱
*/
public void parserXml(String fileName);
}

1.DOM生成和解析XML文檔

為 XML 文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然后構(gòu)建一個駐留內(nèi)存的樹結(jié)構(gòu),然后代碼就可以使用 DOM 接口來操作這個樹結(jié)構(gòu)。優(yōu)點(diǎn):整個文檔樹在內(nèi)存中,便于操作;支持刪除、修改、重新排列等多種功能;缺點(diǎn):將整個文檔調(diào)入內(nèi)存(包括無用的節(jié)點(diǎn)),浪費(fèi)時間和空間;使用場合:一旦解析了文檔還需多次訪問這些數(shù)據(jù);硬件資源充足(內(nèi)存、CPU)。 

package com.alisoft.facepay.framework.bean; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*
* @author hongliang.dinghl
* DOM生成與解析XML文檔
*/
public class DomDemo implements XmlDocument {

private Document document;

private String fileName;

public void init() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
this.document = builder.newDocument();
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
}
}

public void createXml(String fileName) {

Element root = this.document.createElement("employees");
this.document.appendChild(root);
Element employee = this.document.createElement("employee");
Element name = this.document.createElement("name");
name.appendChild(this.document.createTextNode("丁宏亮"));
employee.appendChild(name);
Element sex = this.document.createElement("sex");
sex.appendChild(this.document.createTextNode("m"));
employee.appendChild(sex);
Element age = this.document.createElement("age");
age.appendChild(this.document.createTextNode("30"));
employee.appendChild(age);
root.appendChild(employee);

TransformerFactory tf = TransformerFactory.newInstance();
try {
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
StreamResult result = new StreamResult(pw);
transformer.transform(source, result);
System.out.println("生成XML文件成功!");
} catch (TransformerConfigurationException e) {

System.out.println(e.getMessage());
} catch (IllegalArgumentException e) {

System.out.println(e.getMessage());
} catch (FileNotFoundException e) {

System.out.println(e.getMessage());
} catch (TransformerException e) {

System.out.println(e.getMessage());
}

}

public void parserXml(String fileName) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(fileName);
NodeList employees = document.getChildNodes();
for (int i = 0; i < employees.getLength(); i++) {
Node employee = employees.item(i);
NodeList employeeInfo = employee.getChildNodes();
for (int j = 0; j < employeeInfo.getLength(); j++) {
Node node = employeeInfo.item(j);
NodeList employeeMeta = node.getChildNodes();
for (int k = 0; k < employeeMeta.getLength(); k++) {
System.out.println(employeeMeta.item(k).getNodeName()
+ ":" + employeeMeta.item(k).getTextContent());
}
}
}
System.out.println("解析完畢");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
} catch (SAXException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}

}


}


2.SAX生成和解析XML文檔

為解決DOM的問題,出現(xiàn)了SAX。SAX ,事件驅(qū)動。當(dāng)解析器發(fā)現(xiàn)元素開始、元素結(jié)束、文本、文檔的開始或結(jié)束等時,發(fā)送事件,程序員編寫響應(yīng)這些事件的代碼,保存數(shù)據(jù)。優(yōu)點(diǎn):不用事先調(diào)入整個文檔,占用資源少;SAX解析器代碼比DOM解析器代碼小,適于Applet,下載。缺點(diǎn):不是持久的;事件過后,若沒保存數(shù)據(jù),那么數(shù)據(jù)就丟了;無狀態(tài)性;從事件中只能得到文本,但不知該文本屬于哪個元素;使用場合:Applet;只需XML文檔的少量內(nèi)容,很少回頭訪問;機(jī)器內(nèi)存少;

Java代碼

package com.alisoft.facepay.framework.bean;   
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.SAXException;  
import org.xml.sax.helpers.DefaultHandler;  
/** 
*  
* @author hongliang.dinghl 
* SAX文檔解析 
*/ 
public class SaxDemo implements XmlDocument {  
 
    public void createXml(String fileName) {  
        System.out.println("<<"+filename+">>");  
    }  
 
    public void parserXml(String fileName) {  
        SAXParserFactory saxfac = SAXParserFactory.newInstance();  
 
        try {  
 
            SAXParser saxparser = saxfac.newSAXParser();  
 
            InputStream is = new FileInputStream(fileName);  
 
            saxparser.parse(is, new MySAXHandler());  
 
        } catch (ParserConfigurationException e) {  
 
            e.printStackTrace();  
 
        } catch (SAXException e) {  
 
            e.printStackTrace();  
 
        } catch (FileNotFoundException e) {  
 
            e.printStackTrace();  
 
        } catch (IOException e) {  
 
            e.printStackTrace();  
 
        }  
 
    }  
 
}  
 
class MySAXHandler extends DefaultHandler {  
 
    boolean hasAttribute = false;  
 
    Attributes attributes = null;  
 
    public void startDocument() throws SAXException {  
 
        System.out.println("文檔開始打印了");  
 
    }  
 
    public void endDocument() throws SAXException {  
 
        System.out.println("文檔打印結(jié)束了");  
 
    }  
 
    public void startElement(String uri, String localName, String qName,  
 
    Attributes attributes) throws SAXException {  
 
        if (qName.equals("employees")) {  
 
            return;  
 
        }  
 
        if (qName.equals("employee")) {  
 
            System.out.println(qName);  
 
        }  
 
        if (attributes.getLength() > 0) {  
 
            this.attributes = attributes;  
 
            this.hasAttribute = true;  
 
        }  
 
    }  
 
    public void endElement(String uri, String localName, String qName)  
 
    throws SAXException {  
 
        if (hasAttribute && (attributes != null)) {  
 
            for (int i = 0; i < attributes.getLength(); i++) {  
 
                System.out.println(attributes.getQName(0)  
                        + attributes.getValue(0));  
 
            }  
 
        }  
 
    }  
 
    public void characters(char[] ch, int start, int length)  
 
    throws SAXException {  
 
        System.out.println(new String(ch, start, length));  
 
    }  
 


package com.alisoft.facepay.framework.bean;

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.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author hongliang.dinghl
* SAX文檔解析
*/
public class SaxDemo implements XmlDocument {

public void createXml(String fileName) {
        System.out.println("<<"+filename+">>");
}

public void parserXml(String fileName) {
SAXParserFactory saxfac = SAXParserFactory.newInstance();

try {

SAXParser saxparser = saxfac.newSAXParser();

InputStream is = new FileInputStream(fileName);

saxparser.parse(is, new MySAXHandler());

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

class MySAXHandler extends DefaultHandler {

boolean hasAttribute = false;

Attributes attributes = null;

public void startDocument() throws SAXException {

System.out.println("文檔開始打印了");

}

public void endDocument() throws SAXException {

System.out.println("文檔打印結(jié)束了");

}

public void startElement(String uri, String localName, String qName,

Attributes attributes) throws SAXException {

if (qName.equals("employees")) {

return;

}

if (qName.equals("employee")) {

System.out.println(qName);

}

if (attributes.getLength() > 0) {

this.attributes = attributes;

this.hasAttribute = true;

}

}

public void endElement(String uri, String localName, String qName)

throws SAXException {

if (hasAttribute && (attributes != null)) {

for (int i = 0; i < attributes.getLength(); i++) {

System.out.println(attributes.getQName(0)
+ attributes.getValue(0));

}

}

}

public void characters(char[] ch, int start, int length)

throws SAXException {

System.out.println(new String(ch, start, length));

}

}

3.DOM4J生成和解析XML文檔

DOM4J 是一個非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。

Java代碼

package com.alisoft.facepay.framework.bean;   
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;  
/** 
*  
* @author hongliang.dinghl 
* Dom4j 生成XML文檔與解析XML文檔 
*/ 
public class Dom4jDemo implements XmlDocument {  
 
    public void createXml(String fileName) {  
        Document document = DocumentHelper.createDocument();  
        Element employees=document.addElement("employees");  
        Element employee=employees.addElement("employee");  
        Element name= employee.addElement("name");  
        name.setText("ddvip");  
        Element sex=employee.addElement("sex");  
        sex.setText("m");  
        Element age=employee.addElement("age");  
        age.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());  
        }  
          
          
    }  
 
 
    public void parserXml(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");  
    }   
}  

4.JDOM生成和解析XML  

為減少DOM、SAX的編碼量,出現(xiàn)了JDOM;優(yōu)點(diǎn):20-80原則,極大減少了代碼量。使用場合:要實現(xiàn)的功能簡單,如解析、創(chuàng)建等,但在底層,JDOM還是使用SAX(最常用)、DOM、Xanan文檔。

   
package com.alisoft.facepay.framework.bean;   
 
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;  
/** 
*  
* @author hongliang.dinghl 
* JDOM 生成與解析XML文檔 
*  
*/ 
public class JDomDemo implements XmlDocument {  
 
    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("ddvip");  
      employee.addContent(name);  
      Element sex=new Element("sex");  
      sex.setText("m");  
      employee.addContent(sex);  
      Element age=new Element("age");  
      age.setText("23");  
      employee.addContent(age);  
      XMLOutputter XMLOut = new XMLOutputter();  
      try {  
        XMLOut.output(document, new FileOutputStream(fileName));  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
 
    }  
 
    public void parserXml(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                 Element employee=(Element)employeeList.get(i);  
                List employeeInfo=employee.getChildren();  
                for(int j=0;j                     System.out.println(((Element)employeeInfo.get(j)).getName()+":"+((Element)employeeInfo.get(j)).getValue());  
                      
                }  
            }  
        } catch (JDOMException e) {  
          
            e.printStackTrace();  
        } catch (IOException e) {  
          
            e.printStackTrace();  
        }   
 
    }  
}  
   

【編輯推薦】

  1. XML新手入門 創(chuàng)建構(gòu)造良好的XML
  2. 實現(xiàn)XML和Web服務(wù)時要避免的三種常見錯誤
  3. 數(shù)據(jù)庫中的pureXML優(yōu)點(diǎn)介紹

當(dāng)前名稱:詳解Java解析XML的四種方法
當(dāng)前URL:http://www.5511xx.com/article/dhichgd.html