XML解析

Java利用SAX(Simple API for XML)方式解析XML

SAX解析工具-  Sun公司提供的。內置在jdk中。org.xml.sax.*

基於事件驅動,逐條解析,適用於只處理xml數據,不易編碼,而且很難同時訪問同一個文檔中的多處不同數據

解析思想:通過流的方式將xml文件讀到Java代碼中,然後對流進行解析。

解析目的:獲得其每一個節點中的每一個屬性

解析步驟:

  1. 創建SAXReader流對象
  2. 利用SAXReader對象讀取xml文件並以document對象進行接收
  3. 利用getRootElement()方法獲取根節點
  4. 利用elements()方法獲取子節點並存到list集合中

List<Element> elements = rootElement.elements();//list集合中的泛型可以是接口
只要是引用類型都可以

  1. 對List集合進行遍歷即可獲取每個節點的相關屬性。

代碼實例:

Xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<animals>

    <animal class="dog">

         <name>wangCai</name>

         <age>3</age>

         <gender>male</gender>

    </animal>

   

         <animal class="tiger">

         <name>tiger1</name>

         <age>5</age>

         <gender>male</gender>

         </animal>

</animals>

Java代碼:

package com.xml.demo;



import java.io.File;

import java.util.List;



import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;



public class DemoXML {

    public static void main(String[] args) {

         SAXReader reader = new SAXReader();

         try {

             //獲取document對象

             Document document = reader.read(new File(System.getProperty("user.dir")

                      +File.separator+"src", "animals.xml"));

             //獲取根節點

             Element rootElement = document.getRootElement();

             //獲取子節點

             List<Element> elements = rootElement.elements();

             for (Element element : elements) {

                  //獲取指定屬性值

                  String className = element.attribute("class").getValue();

                  String name = "";//姓名

                  String age = "";//年齡

                  List<Element> elements2 = element.elements();

                  for (Element element2 : elements2) {

                      String name2 = element2.getName();

                      System.out.println(name2);

                      if("name".equals(name2)) {

                          name = element2.getText();

                      }else if("age".equals(name2)) {

                          age = element2.getText();

                      }

                     

                  }

                  System.out.println("類別:"+className

                          + ";姓名:" + name

                          + ";年齡:" + age);

             }

         } catch (DocumentException e) {

             // TODO Auto-generated catch block

             e.printStackTrace();

         }

    }

}

 

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