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

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

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

    dream.in.java

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

    JAVA解析XML的四種方法比較

    XML現(xiàn)在已經(jīng)成為一種通用的數(shù)據(jù)交換格式,它的平臺無關(guān)性,語言無關(guān)性,系統(tǒng)無關(guān)性,給數(shù)據(jù)集成與交互帶來了極大的方便。對于XML本身的語法知識與技術(shù)細節(jié),需要閱讀相關(guān)的技術(shù)文獻,這里面包括的內(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獲取更多信息。

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

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

    本文使用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)點:整個文檔樹在內(nèi)存中,便于操作;支持刪除、修改、重新排列等多種功能;缺點:將整個文檔調(diào)入內(nèi)存(包括無用的節(jié)點),浪費時間和空間;使用場合:一旦解析了文檔還需多次訪問這些數(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ū)動。當解析器發(fā)現(xiàn)元素開始、元素結(jié)束、文本、文檔的開始或結(jié)束等時,發(fā)送事件,程序員編寫響應(yīng)這些事件的代碼,保存數(shù)據(jù)。優(yōu)點:不用事先調(diào)入整個文檔,占用資源少;SAX解析器代碼比DOM解析器代碼小,適于Applet,下載。缺點:不是持久的;事件過后,若沒保存數(shù)據(jù),那么數(shù)據(jù)就丟了;無狀態(tài)性;從事件中只能得到文本,但不知該文本屬于哪個元素;使用場合:Applet;只需XML文檔的少量內(nèi)容,很少回頭訪問;機器內(nèi)存少;

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

     

     

     

        }

     

     

     

    }

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


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲国产精品13p| 日韩中文无码有码免费视频| 国产偷国产偷亚洲高清日韩| 亚洲大码熟女在线观看| 免费观看的毛片手机视频| 亚洲爆乳少妇无码激情| 色视频色露露永久免费观看| 亚洲AV无码片一区二区三区| 日本高清免费中文字幕不卡| 蜜臀亚洲AV无码精品国产午夜.| 免费一级毛片在线观看| 一级毛片a免费播放王色电影 | 免费鲁丝片一级观看| 美国毛片亚洲社区在线观看| vvvv99日韩精品亚洲| 99久久免费国产特黄| 亚洲精品网站在线观看你懂的| h片在线免费观看| 亚洲小说图区综合在线| 免费在线视频一区| 中文字幕免费观看视频| 亚洲黑人嫩小videos| 成年女人免费v片| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 91av免费观看| 亚洲日韩一区二区一无码| 免费看一级做a爰片久久| sss日本免费完整版在线观看| 亚洲av无码一区二区三区网站| 最近中文字幕国语免费完整| 亚洲色大成网站www| 亚洲国产精品嫩草影院久久| 久久久久久国产精品免费免费男同 | 国产免费伦精品一区二区三区 | 亚洲国产精品无码久久一区二区| 18成禁人视频免费网站| 美女被免费网站在线视频免费| 国产亚洲精品资在线| 希望影院高清免费观看视频| 成人午夜免费视频| 亚洲成av人片不卡无码|