<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    dream.in.java

    能以不變應萬變是聰明人做事的準則。萬事從小事做起,積累小成功,問鼎大成功,是成功者的秘訣。

    JAVA解析XML的四種方法比較

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

            XML在不同的語言里解析方式都是一樣的,只不過實現的語法不同而已。基本的解析方式有兩種,一種叫SAX,另一種叫DOM。SAX是基于事件流的解析,DOM是基于XML文檔樹結構的解析。假設我們XML的內容和結構如下:

    <?xml version=”1.0″ encoding=”UTF-8″?> 
    <employees>
      <employee>
        <name>ddviplinux</name>
        <sex>m</sex>
        <age>30</age>
      </employee>
    </employees>

    本文使用JAVA語言來實現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 文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然后構建一個駐留內存的樹結構,然后代碼就可以使用 DOM 接口來操作這個樹結構。優點:整個文檔樹在內存中,便于操作;支持刪除、修改、重新排列等多種功能;缺點:將整個文檔調入內存(包括無用的節點),浪費時間和空間;使用場合:一旦解析了文檔還需多次訪問這些數據;硬件資源充足(內存、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的問題,出現了SAX。SAX ,事件驅動。當解析器發現元素開始、元素結束、文本、文檔的開始或結束等時,發送事件,程序員編寫響應這些事件的代碼,保存數據。優點:不用事先調入整個文檔,占用資源少;SAX解析器代碼比DOM解析器代碼小,適于Applet,下載。缺點:不是持久的;事件過后,若沒保存數據,那么數據就丟了;無狀態性;從事件中只能得到文本,但不知該文本屬于哪個元素;使用場合:Applet;只需XML文檔的少量內容,很少回頭訪問;機器內存少;

    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(“文檔打印結束了“);

     

     

     

        }

     

     

     

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

     

     

     

        }

     

     

     

    }

    posted on 2009-04-05 20:27 YXY 閱讀(133) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日韩在线不卡免费视频一区| 中国毛片免费观看| 免费精品国偷自产在线在线 | 国产成人免费永久播放视频平台| 亚洲福利视频网址| 亚洲一级毛片免费在线观看| 亚洲欧洲日产国产综合网| 久久大香伊焦在人线免费| 日韩一卡2卡3卡4卡新区亚洲 | 最近中文字幕国语免费完整| 夜夜亚洲天天久久| 在线观看免费人成视频色| 亚洲久悠悠色悠在线播放| 麻豆国产入口在线观看免费| 在线播放亚洲精品| 三上悠亚亚洲一区高清| 久久精品免费视频观看| 亚洲激情视频在线观看| 无码国产精品一区二区免费式直播 | 亚洲伊人久久大香线焦| 在线精品免费视频| 一日本道a高清免费播放| 亚洲国产精品无码一线岛国| 88xx成人永久免费观看| 亚洲一区精彩视频| 亚洲国产成人精品久久久国产成人一区二区三区综 | 免费人成在线观看网站品爱网日本| 全黄A免费一级毛片| 国产成A人亚洲精V品无码| 在线精品一卡乱码免费| 国产亚洲综合视频| 国产成人A人亚洲精品无码| 四虎精品视频在线永久免费观看| 亚洲av无码专区青青草原| 中文字幕亚洲乱码熟女一区二区| 97视频免费观看2区| 青青视频免费在线| 久久久久久久亚洲Av无码| 四虎影永久在线高清免费| 最近免费mv在线观看动漫| 2020国产精品亚洲综合网|