用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文件》中有代碼,這里不再贅述,傳送門:http://www.rzrgm.cn/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(); } } }
浙公網安備 33010602011771號