JAVA解析XML之DOM方式

來源:互聯網
上載者:User

標籤:

JAVA解析XML之DOM方式準備工作

  建立DocumentBuilderFactory對象;

    建立DocumentBuilder對象;

  通過DocumentBuilder對象的parse方法載入xml

解析XML檔案的屬性名稱和屬性值解析XML檔案的節點名和節點值  常用方法如下:

    getElementsByTagName();

    getLength();

    item();

    getNodeName();

    getNodeValue();

    getNodeType();

    *getAttributes();  node

    *getAttribute("name");  element

    getChildNodes();

    getFirstChild();

  常用的節點類型:

    

 下面直接上代碼
package pers.zww.xml;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Dom {    public static void main(String[] args) {        // 建立DocumentBuilderFactory對象        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        // 建立DocumentBuilder對象        DocumentBuilder db;        try {            db = dbf.newDocumentBuilder();            // 通過DocumentBuilder對象的parse方法載入xml            Document document = db.parse("books.xml");            // 擷取book節點集合            NodeList bookList = document.getElementsByTagName("book");            // 通過noodlist的getLength()方法,擷取長度            System.out.println(bookList.getLength());            // 遍曆book節點            for (int i = 0; i < bookList.getLength(); i++) {                System.out.println("=======================");                // item(i)方法擷取節點                Node book = (Node) bookList.item(i);                // 擷取book節點的所有屬性集合                NamedNodeMap attrs = book.getAttributes();                // 遍曆book的屬性                System.out.println("第" + (i + 1) + "本書共有" + attrs.getLength()                        + "個屬性");                for (int j = 0; j < attrs.getLength(); j++) {                    /*                     * 節點類型 TYPE                     * element   1                     * attr      2                     * text      3                     */                    /*                     * 若只有一個屬性則                     * 將book節點node強制類型轉換                     * 用element的getAttribute("id")方法                     */                    // item(i)方法擷取屬性                    Node attr = attrs.item(j);                    // 擷取屬性名稱                    System.out.print("屬性名稱:" + attr.getNodeName());                    // 擷取屬性值                    System.out.println(" && 屬性值:" + attr.getNodeValue());                    //解析book的子節點                    NodeList childNodes=book.getChildNodes();                    //擷取每個節點的節點名/值                    System.out.println("共有"+childNodes.getLength()+"個子節點");                    for (int k = 0; k < childNodes.getLength(); k++) {                        //區分text類型的node以及element類型的node                        if (childNodes.item(k).getNodeType()==Node.ELEMENT_NODE) {                            //擷取element類型節點的節點名                            System.out.print("節點名 "+childNodes.item(k).getNodeName());                            //擷取element類型節點的節點值                                                        //法一:                            System.out.println(" && 節點值 "+childNodes.item(k).getFirstChild().getNodeValue());                                                        //法二:                            //子節點的所有值                            //System.out.println(" && 節點值 "+childNodes.item(k).getTextContent());                                                        /*                             * 不同點:                             * 若在name節點下再添加一個節點例如<h>xiumu</h>時,法一的值為null,                             * 而法二的值為xiumuJAVA編程思想                             */                        }                    }                }            }        } catch (ParserConfigurationException | SAXException | IOException e) {            e.printStackTrace();        }    }}
View Code

 

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <bookstore> 3     <book id="1"> 4         <name><h>xiumu</h>JAVA編程思想</name> 5         <anthor>****</anthor> 6         <year>2000</year> 7     </book> 8     <book id="2"> 9         <name>瘋狂JAVA系列</name>10         <anthor>李剛</anthor>11         <price>89</price>12     </book>13 </bookstore>
View Code要點

  當已確定節點的屬性只有一個時,可將節點強制轉換為element,並調用其getAttribute("name")方法;

  getLength()方法子節點的個數時,將空白和換行也算了進去;

參考資料

  慕課網JessicaJiang老師視頻教程

JAVA解析XML之DOM方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.