XML 四、應用 DOM4J 及 JDOM 方式解析 XML

4-1 JDOM 開始解析前的準備工作

1.創建一個SAXBuilder對象

SAXBuilder saxbuilder=newSAXBuilder();

2.創建輸入流,將xml文件加載到輸入流中(拋出FileNotFoundException)

Inputstream in=new FileInputstream("xxx.xml");

3.通過SAXBuilder的Build方法將輸入流加載到saxb中獲取dom對象

Document doc = saxbuilder.build(in);

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

Element rootElement =doc.getRootElement();

5.獲取根結點下的子節點的List集合

List<Element> bookList = rootElement.getChildren();

 

4-2 應用 JDOM 解析節點屬性

//繼續進行解析

for (Element book : bookList) {

 System.out.println("===開始解析第"+(bookList.indexOf(book)+1)+"本書===");

 //解析book的屬性

 List<Attribute> attrList = book.getAttributes();

//    //知道節點下屬性名稱時,獲取節點值

//    book.getAttributeValue("id");

 //遍歷attrList(針對不清楚book節點下屬性的名字和數量)

 for (Attribute attr : attrList) {

  //遍歷屬性名

  String attrName = attr.getName();

  //遍歷屬性值

  String attrValue = attr.getValue();

  System.out.println("屬性名:"+attrName+"---屬性值:"+attrValue);

 }

 System.out.println("===結束解析第"+(bookList.indexOf(book)+1)+"本書===");

}

 

4-3 應用 JDOM 解析子節點的名和值

  • JDOM中每個節點都有getchildren()方法

// 對book節點的子節點的節點名以及節點值的遍歷

List<Element> bookChilds = book.getChildren();

for (Element child : bookChilds) {

System.out.println("節點名:" + child.getName() + "----節點值:" + child.getValue());

}

 

4-4  JDOM 解析時亂碼的處理

1.修改xml第一行的encoding屬性

2.在代碼中處理,應用IO流知識

//創建輸入流,將XML文件加載到輸入流中

InputStream in = new FileInputStream("src/book.xml");

//使用包裝流InputStreamReader進行讀取編碼的指定

InputStreamReader isr = new InputStreamReader(in,"UTF-8");

 

4-5 在 JDOM 中存儲 Book 對象 

和之前的存儲方式並無太大差異。

創建book對象ArrayList集合

添加節點屬性值到book

if(attrName.equals("id")){
personEntity.setId(attrValue);
}

添加子節點屬性值到book

if (child.getName().equals("name")) {
bookEntity.setName(child.getValue());
}

 

4-6 關於 JDOM 使用過程中 JAR 包的引用

1.通過右鍵項目,選擇build Path下的Add External Archives導入系統任意路徑下的jar包。但是這種方式並沒有將jar包真正導入項目中,一旦遷移,則會丟失
2.通過右鍵項目,新建lib文件夾,直接將jar包拷貝到lib文件夾下,然後再通過build Path將jar包導入進來

 

4-7  應用 DOM4J 解析節點屬性

1、創建一個 SAXReader 對象

SAXReader saxReader = new SAXReader();

2、通過SAXReader對象的read方法加載books.xml文件,獲取docuemnt對象

Document document = saxReader.read(new file(...../book.xml));

3、通過 getRootElement() 獲取根節點bookstore

Element bookstore = document.getRootElement();

4、通過 elementIterator() 獲取book的迭代器

Iterator it = bookstore.elementIterator();

5、遍歷迭代器,獲取根節點中的信息(書籍)

while(it.hasNext()){

//獲取子節點的元素

Element book = (Element)it.next();

}

6、獲取屬性節點類似 JDOM 解析

List<Attribute> attrs = book.attributes();

7、遍歷,獲取屬性節點名、值

book.getName() book.getValue()

8、獲取book子節點的迭代器

Iterator itt = book.elementIterator();

8、遍歷,獲取元素節點名、值

book.getName() book.getStringValue() / book.getText()

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