Java基礎——XML

XML

                SGML : 標準通用置標語言    Standard Generailzed    Markup Language

XML        

                HTML : 超文本置標語言    HyperText Markup Language

XML : 可擴展標記語言

標記 : 指計算機所能理解的信息符號

XML 的優點 : 

        ① 可擴展的標記

        ② 數據共享和重用

        ③ XML 遵循嚴格的語法要求

        ④ XML 便於不同系統之間信息的傳輸

        ⑤ 數據存儲格式不受顯示格式的制約

        ⑥ 包含語義的文檔格式

        ⑦ 對面向對象(OOP)的支持 DOM

        ⑧ 內容與形式的分離

        ⑨ 具有較好的保值性

缺點:

        ① 語義表達能力上略顯不足

        ② XML 的有些技術尚未形成統一的標準

        ③ 應用程序\瀏覽器對XML 的支持也是有限的

基本格式 :<標記名></標記名>

    字符: >    --->    &gt;                    <    --->    &lt;                &    --->    &amp;

                "    --->    &quot;                ,      --->    &apos;          空格    --->    &nbsp;

 

XML 和 HTML 的主要區別:

    XML 是被設計用來描述數據的,重點是:什麼是數據,如何存放數據

    HTML 是被設計用來顯示數據的,重點是:顯示數據以及如何更好地顯示數據

 

XML 聲明:

    <?xml version = "XML的版本號" encoding = "採用的編碼標準" standalone = "no"?>

處理指令:

    <?處理指令名 處理指令信息>

 

DOM解析

DOM:是將xml文件全部載入,組裝成一顆dom樹,然後通過節點以及節點之間的關係來解析xml文件

            或    將xml以樹結構的方式一次性加載進內存,易用,修改方便,但是更佔內存。不適應於大文件,一般情況下用它即可應付大多數應用。

DOM 是用與平臺和語言無關的方式表示 XML 文檔的官方 W3C 標準。DOM 是以層次結構組織的節點或信息片斷的集合

DOM 解析器需要將整個文檔解析一遍,並將解析結果以樹型結構保存到內存中( 這棵樹被稱爲DOM 樹),然後才把程序

的控制權交給用戶。這導致了DOM 方式不夠靈活,需要佔用大量的資源

DOM xml文件的創建:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//獲取 DocumentBuilderFactory 的新實例。

    DocumentBuilder db = dbf.newDocumentBuilder();//使用當前配置的參數創建一個新的 DocumentBuilder 實例。

    Document doc = db.newDocument();//獲取 DOM Document 對象的一個新實例來生成一個 DOM 樹。

    Element root = doc.createElement("root");    //創建根結點

    document.appendChild(root);    //追加嵌套        setTextContent()、setAttribute()    加值

    

    TransformerFactory tf = TransformerFactory.newInstance();// 獲取 TransformerFactory 的新實例。

    Transformer t = tf.newTransformer();//此抽象類的實例能夠將源樹轉換爲結果樹。

    t.transform(new DOMSource(root), new StreamResult("xml文件路徑"));

DOM xml文件的讀取:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    DocumentBuilder db = dbf.newDocumentBuilder();

    Document document = db.parse("xml文件路徑");

 

    NodeList array = document.getChildNodes();

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

        Node cla = array.item(i);

        NodeList stus = cla.getChildNodes();

        for (int j=0;j<stus.getLength();j++) {

            Node stu = stus.item(j);

            NamedNodeMap arrs = stu.getAttributes();

            if (stu.getNodeName().equals("student")) { //過濾掉#test

                for(int k = 0;k<arrs.getLength();k++){

                    Node arr = arrs.item(k);

                    System.out.println(arr.getNodeName()+" "+arr.getNodeValue());

                }

            }

        }

    }

Dom4j 解析

     查詢:

        SAXReader sr = new SAXReader();

        Document doc = sr.read("xml文件路徑");

        List<DefaultElement> list = doc.selectNodes("節點/子節點");

    增加:

        SAXReader sr = new SAXReader();

        Document doc = sr.read("xml文件路徑);

        List<DefaultElement> list = doc.selectNodes("節點");

        DefaultElement de = list.get(0);

        Element ele = de.addElement("要增加的節點");

        ele.addAttribute("要增加的屬性名","要增加的值");

        ele.addText("增加文本值");

        XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));

        write.write(doc); write.close();

    修改:

        SAXReader saxReader = new SAXReader();

        Document doc = saxReader.read("xml文件路徑");

        List<DefaultElement> list = doc.selectNodes("節點");

        DefaultElement de = list.get(0);

        List<Element> list2  = de.elements();

        for (Element e : list2) {

            if (e.attributeValue("屬性名").equals("屬性值")) {

                Element eleName = e.element("屬性名");

                eleName.setText("新值");

            }

        }

        XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));

        write.write(doc); write.close();

    刪除:

        SAXReader saxReader = new SAXReader();

        Document doc = saxReader.read("xml文件路徑");

        List<DefaultElement> list = doc.selectNodes("節點");

        DefaultElement de = list.get(0);

        List<Element> list2  = de.elements();

        for (Element e : list2) {

            if (e.attributeValue("屬性名").equals("屬性值")) {

                de.remove(e);

            }

        }

        XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));

        write.write(doc); write.close();

 

將文檔寫入XML文件:

    ① 文檔中全英文,不設置編碼,直接寫入

        XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));

        write.write(document); write.close();

    ② 文檔中含有中文,設置編碼格式再寫入

        OutputFormat format = OutputFormat.createPrettyPrint();

        format.setEncoding("指定編碼格式");

        XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路徑"));

        write.write(document); write.close();

 

創建XML文件 :

    String fileName = "路徑";

    Document doc = DocumentHelper.createDocument();

    Element root = doc.addElement("根節點"); 

    XMLWriter writer = new XMLWriter(new File(fileName));

    writer.write(doc);

    writer.close();

 

將字符串轉化爲 XML 文件 : 

    String text = "<cla><stu> 屬性 </stu></cla>";

    Document doc = DocumentHelper.parseText(text);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章