1. 程式人生 > 其它 >java 解析 XML例項

java 解析 XML例項

package com.hseact.fecp.servlet;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.json.JSONObject;
import org.json.XML;
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;

/**
 * DOM方式解析xml
 */
public class DOMTest {

    public static void main(String[] args) {
        //1、建立一個DocumentBuilderFactory的物件
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //2、建立一個DocumentBuilder的物件
        try {
            //建立DocumentBuilder物件
            DocumentBuilder db = dbf.newDocumentBuilder();
            //3、通過DocumentBuilder物件的parser方法載入books.xml檔案到當前專案下
            /*注意匯入Document物件時,要匯入org.w3c.dom.Document包下的*/
            Document document = db.parse("WebContent\template\demo.svg");//傳入檔名可以是相對路徑也可以是絕對路徑

            //獲取所有book節點的集合
            NodeList bookList = document.getElementsByTagName("svg");
            //通過nodelist的getLength()方法可以獲取bookList的長度
            System.out.println("一共有" + bookList.getLength() + "本書");
            //遍歷每一個book節點
            for (int i = 0; i < bookList.getLength(); i++) {
                System.out.println("=================下面開始遍歷第" + (i + 1) + "本書的內容=================");
        //❤未知節點屬性的個數和屬性名時:
                //通過 item(i)方法 獲取一個book節點,nodelist的索引值從0開始
                Node book = bookList.item(i);
                //獲取book節點的所有屬性集合
                NamedNodeMap attrs = book.getAttributes();
                System.out.println("第 " + (i + 1) + "本書共有" + attrs.getLength() + "個屬性");
                //遍歷book的屬性
                for (int j = 0; j < attrs.getLength(); j++) {
                    //通過item(index)方法獲取book節點的某一個屬性
                    Node attr = attrs.item(j);
                    //獲取屬性名
                    System.out.print("屬性名:" + attr.getNodeName());
                    //獲取屬性值
                    System.out.println("--屬性值" + attr.getNodeValue());
                }
   

                NodeList childNodes = book.getChildNodes();
              //遍歷childNodes獲取每個節點的節點名和節點值
                System.out.println("第" + (i+1) + "本書共有" + 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("第" + (k + 1) + "個節點的節點名:" + childNodes.item(k).getNodeName());
                      //獲取了element型別節點的節點值
                       // System.out.println("--節點值是:" + childNodes.item(k).getFirstChild().getNodeValue());
                     //遍歷book的屬性
                        NamedNodeMap eleAttrs = childNodes.item(k).getAttributes();
                        for (int j = 0; j < eleAttrs.getLength(); j++) {
                            //通過item(index)方法獲取book節點的某一個屬性
                            Node attr = eleAttrs.item(j);
                            //獲取屬性名
                            System.out.print("屬性名:" + attr.getNodeName());
                            //獲取屬性值
                            System.out.println("--屬性值" + attr.getNodeValue());
                        } 
                    }
                }
                System.out.println("======================結束遍歷第" + (i + 1) + "本書的內容=================");
            }

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}