<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)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 无码国产精品一区二区免费模式| 亚洲AV无码专区国产乱码不卡| 又长又大又粗又硬3p免费视频| 成年在线网站免费观看无广告| 亚洲精品中文字幕无码AV| 日韩av无码免费播放| 久久亚洲国产精品123区| 人成免费在线视频| 亚洲乱码中文字幕手机在线| 风间由美在线亚洲一区| 国产精品免费综合一区视频| 亚洲成a人无码亚洲成www牛牛| 无限动漫网在线观看免费| 亚洲老熟女@TubeumTV| 日韩精品人妻系列无码专区免费 | 成年美女黄网站色大免费视频| 亚洲日韩国产精品无码av| 99在线精品免费视频九九视| 亚洲五月丁香综合视频| 处破痛哭A√18成年片免费| 亚洲爆乳少妇无码激情| 亚洲精品动漫人成3d在线| 国产高潮流白浆喷水免费A片 | 国产亚洲精品AA片在线观看不加载| 三级网站在线免费观看| 亚洲av色福利天堂| 91免费国产自产地址入| 亚洲日本一线产区和二线产区对比 | 亚洲国产熟亚洲女视频| 国产精品免费_区二区三区观看| 免费播放美女一级毛片| 亚洲精品无码久久久影院相关影片| 免费一区二区三区| 亚洲一级特黄特黄的大片| 亚洲AV无码乱码在线观看牲色| 精品一区二区三区免费视频 | 卡一卡二卡三在线入口免费| 日韩精品无码免费视频| 精品日韩亚洲AV无码| 日本免费人成黄页网观看视频 | 一区二区无码免费视频网站|