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);
相關文章
相關標籤/搜索