用JDOM和DOM4J解析節點名節點值


1、用JDOM解析節點名和節點值

1、創建一個SAXBuilder對象

2、創建一個輸入流, 將xml文件加載到文件中

3.   通過saxBuilder的方法,將輸入流加載到saxBuilder

4.   通過document對象獲取xml文件的根節點

5.   獲取根節點下的子節點的List集合(藍色部分

6、獲取子節點的子節點的List集合(黃色部分

7、如果遇到了亂碼可以修改xml文件的編碼,或者用InputStreamReader承接(紅色部分)

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

public class JDOMTest {

    public static void main(String[] args) {
        //進行對book.xml的JDOM解析
        //准備工作
        //1、創建一個SAXBuilder對象
        SAXBuilder saxBuilder = new SAXBuilder();
        InputStream in;
        try {
            //2、創建一個輸入流, 將xml文件加載到文件中
            in = new FileInputStream("src/res/book.xml");
       //InputStreamReader isr = new InputStreamReader(in, "UTF-8");
//3.通過saxBuilder的方法,將輸入流加載到saxBuilder Document document = saxBuilder.build(in); //4.通過document對象獲取xml文件的根節點 Element element = document.getRootElement(); //5.獲取根節點下的子節點的List集合 List<Element> bookList = element.getChildren(); //繼續進行解析 for(Element book: bookList) {
          //bookList.indexOf(book)得到book元素在bookList之中的位置,可以輸出序號
 System.out.println("----------------開始解析第" + (bookList.indexOf(book) + 1) + "本書---------------"); //解析book的屬性
                List<Attribute> attributes = book.getAttributes(); for(Attribute attr: attributes) { //獲取屬性值(知道屬性名)
                    //String value = book.getAttributeValue("id"); //獲取屬性名和屬性值(不知道屬性名)
                    String attrName = attr.getName(); String attrValue = attr.getValue(); System.out.println("屬性名" + attrName + "  屬性值" + attrValue); }

//對book節點的子節點的節點名和節點值的遍歷
//在JDOM中每個節點都有getChildren方法,都可以通過getName和getValue
//獲取節點名和節點值
List<Element> bookChildren = book.getChildren();
for (Element bookChild : bookChildren) {
  System.out.println("屬性名:" + bookChild.getName()
  + " 屬性值:" + bookChild.getValue());
}

                System.out.println("----------------結束解析第" + (bookList.indexOf(book) + 1)
                        + "本書---------------");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

8、存入book類中,在上一篇《用SAX方法解析xml文件》中有代碼,這里不再贅述,傳送門:https://www.cnblogs.com/songaodi/p/9323830.html

9、在使用JDOM過程中,如果要把你的java工程export其他電腦上,jar包不會跟隨工程export,因為它只是引用了jar包,那么怎么讓jar包跟着工程走呢?往下看

(1)、把jar包取消導入,點擊remove

(2)我們發現程序報錯了,因為找不到包了

(3)在工程下建一個folder,把jar包復制過來

 

 (4)選中jar包加入工程Build Path --->Add JARs

(5)完成了!!!

 

10、用DOM4J解析節點名和節點值

package cn.edu.zzuli.DOM4JTest;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class DOM4J {

    public static void main(String[] args) {
        //解析xml文件
        //創建SAXReader的對象reader
        SAXReader reader = new SAXReader();
        try {
            //通過reader對象的read方法加載book。xml文件
            Document document = reader.read(new File("src/res/book.xml"));
            //通過document的getRootElement獲取根節點
            Element bookstore = document.getRootElement();
            //遍歷根節點的子節點,用Element對象的elementIterator獲取子節點的迭代器
            Iterator<Element> booksIterator = bookstore.elementIterator();
            //遍歷迭代器,獲取根節點的信息
            while(booksIterator.hasNext()) {
                System.out.println("------開始遍歷某本書---------");
                Element book = booksIterator.next();
                //獲取book的屬性名和屬性值
                List<Attribute> bookattributes = book.attributes();
                for (Attribute attribute : bookattributes) {
                    System.out.println("屬性名: " + attribute.getName() + "--屬性值:"
                            + attribute.getValue());
                }
                //遍歷book節點子節點,elementIterator得到迭代器
                Iterator it2 = book.elementIterator();
                while(it2.hasNext()) {
                    Element bookChild = (Element)it2.next();
                    System.out.println("節點名:" + bookChild.getName() + "--節點值:"
                            + bookChild.getStringValue());
                }
                System.out.println("------結束遍歷某本書---------");
            }
        } catch(DocumentException e) {
            e.printStackTrace();
        }

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM