亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

java中導入org.jdom.Document和org.dom4j.Document沖突

請各位大神解惑,dom4j和jdom無法同時運行,jdom中引用的Document和Element都顯示屬于dom4j包中,同時導入org.jdom.Document和org.dom4j.Document報錯

代碼如下:


package com.imooc.parsertest;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;


import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;


//import org.jdom.Attribute;

//import org.jdom.Element;


import com.imooc.entity.Book;

import com.imooc.handler.SAXParserHandler;


import org.junit.Test;


public class ParserTest {


public void dom4jTest(){

ArrayList<Book> booksList = new ArrayList<Book>();

// 解析books.xml文件

//創建SAXReader的對象reader

SAXReader reader = new SAXReader();

try {

//通過reader對象的read方法加載xml文件,獲取document對象

Document document = reader.read(new File("src/res/books.xml"));

//通過document對象獲取根節點bookstore

Element bookStore = document.getRootElement();

//通過element對象的elementIterator方法獲取迭代器

Iterator it = bookStore.elementIterator();

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

while(it.hasNext()){

Book books = new Book();

int i = 1;

// System.out.println("=====開始遍歷某一本書=====");

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

//獲取book的屬性名以及屬性值

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

for(Attribute attr : bookAttrs){

// System.out.println("屬性名:" + attr.getName() + "---屬性值:" + attr.getValue());

if(attr.getName().equals("id")){

books.setId(attr.getValue());

}

}

//通過element對象的elementIterator方法獲取迭代器

Iterator itt = book.elementIterator();

//遍歷迭代器,獲取子節點中的信息

while(itt.hasNext()){

Element bookChild = (Element)itt.next();

// System.out.println("節點名:" + bookChild.getName() + "--節點值:" + bookChild.getStringValue());

if(bookChild.getName().equals("name")){

books.setName(bookChild.getStringValue());

}

else if(bookChild.getName().equals("author")){

books.setAuthor(bookChild.getStringValue());

}

else if(bookChild.getName().equals("year")){

books.setYear(bookChild.getStringValue());

}

else if(bookChild.getName().equals("price")){

books.setPrice(bookChild.getStringValue());

}

else if(bookChild.getName().equals("language")){

books.setLanguage(bookChild.getStringValue());

}

}

i++;

// System.out.println("=====結束遍歷某一本書=====");

booksList.add(books);

books = null;

if(i == booksList.size()){

for(Book booksl : booksList){

// System.out.println("-----開始遍歷-----");

// System.out.println(booksl.getId());

// System.out.println(booksl.getName());

// System.out.println(booksl.getAuthor());

// System.out.println(booksl.getYear());

// System.out.println(booksl.getPrice());

// System.out.println(booksl.getLanguage());

// System.out.println("-----結束遍歷-----");

}

}

}

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void domTest(){

// 創建一個DocumentBuilderFactory的對象

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

//創建一個DocumentBuilder的對象

try {

DocumentBuilder db = dbf.newDocumentBuilder();

//通過DocumentBuilder對象的parser方法加載books.xml文件到當前項目下

org.w3c.dom.Document document = db.parse("books.xml");

//獲取所有book節點的集合

NodeList bookList = document.getElementsByTagName("book");

//通過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.println("屬性名:" + attr.getNodeName());

// //獲取屬性值

// System.out.println("屬性值" + attr.getNodeValue());

}

//前提: 已經知道book節點有且只有一個id屬性

// //將book節點進行強制類型轉換,轉換成Element類型

// Element book = (Element)bookList.item(i);

// //通過getAttribute("id")方法獲取屬性值

// String s = book.getAttribute("id");

// System.out.println("id的屬性值為:" + s);

//解析book節點的子節點

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.println(childNodes.item(k).getNodeName());

// //獲取element類型節點的節點值

//// System.out.println(childNodes.item(k).getFirstChild().getNodeValue());

// System.out.println(childNodes.item(k).getTextContent());

}

}

// System.out.println("下面結束遍歷第" + (i+1) + "本書的內容");

}

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void jdomTest(){

ArrayList<Book> booksList = new ArrayList<Book>();

// 進行對books.xml文件的JDOM解析

//準備工作?

//1.創建一個SAXBuileder的對象

SAXBuilder saxBuilder = new SAXBuilder();

//2.創建一個輸入流

InputStream in;

try {

//將xml文件加載到輸入流中來

in = new FileInputStream("src/res/books.xml");

//創建一個InputStreamReader對象并聲明轉換后的編碼格式

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

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

org.jdom.Document document = saxBuilder.build(in);

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

org.jdom.Element rootElement = document.getRootElement();

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

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

int i = 0;//定義一個變量用于比較根節點下子節點個數

//繼續進行解析

for(Element book : bookList){

//新建book對象

Book bookEntity = new Book();

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

//解析book的屬性

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

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

// System.out.println(book.getAttributeValue("id"));

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

for(Attribute attr : attrList){

//獲取屬性名

String attrName = attr.getName();

//獲取屬性值

String attrValue = attr.getValue();

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

//賦值book的id屬性

if(attrName.equals("id")){

bookEntity.setId(attrValue);

}

}

//對book節點的子節點的節點名和節點值的遍歷

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

for(Element child : bookChilds){

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

// //通過判斷循給對應屬性賦值

if(child.getName().equals("name")){

bookEntity.setName(child.getStringValue());

}

else if(child.getName().equals("author")){

bookEntity.setAuthor(child.getStringValue());

}

else if(child.getName().equals("year")){

bookEntity.setYear(child.getStringValue());

}

else if(child.getName().equals("price")){

bookEntity.setPrice(child.getStringValue());

}

else if(child.getName().equals("language")){

bookEntity.setLanguage(child.getStringValue());

}

}

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

i++;

//將bookEntity對象存入booksList集合中

booksList.add(bookEntity);

bookEntity = null;//清空緩存,再次接收數據

if(i == bookList.size()){//判斷xml中book對象全部插入集合后再輸出

//遍歷輸出booksList集合中存入的數據

for(Book books : booksList){

// System.out.println(books.getId());

// System.out.println(books.getName());

// if(!(books.getAuthor() == null)){

// System.out.println(books.getAuthor());

// }

// System.out.println(books.getYear());

// System.out.println(books.getPrice());

// if(!(books.getLanguage() == null)){

// System.out.println(books.getLanguage());

// }

}

}

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (JDOMException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


}

public void saxTest(){

try {

//獲取一個SAXParserFactory的實例

SAXParserFactory factory = SAXParserFactory.newInstance();

//通過factory獲取SAXParser實例

SAXParser parser = factory.newSAXParser();

//創建SAXParserHandler對象

SAXParserHandler handler = new SAXParserHandler();

//調用parser的parse方法解析xml文件

parser.parse("books.xml", handler);

//輸出bookList數組中保存的book對象個數

// System.out.println("---共有" + handler.getBookList().size() + "本書!");

for(Book book : handler.getBookList()){//遍歷循環輸出每個book對象的每個屬性

// System.out.println(book.getId());

// System.out.println(book.getName());

// System.out.println(book.getAuthor());

// System.out.println(book.getYear());

// System.out.println(book.getPrice());

// System.out.println(book.getLanguage());

// System.out.println("-----finish-----");

}

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


}

@Test

public void testPerformance() throws Exception{

System.out.println("---性能測試---");

long start = System.currentTimeMillis();

dom4jTest();

System.out.println("dom4j時長:" + (System.currentTimeMillis() - start));

start = System.currentTimeMillis();

domTest();

System.out.println("dom時長:" + (System.currentTimeMillis() - start));

start = System.currentTimeMillis();

saxTest();

System.out.println("sax時長:" + (System.currentTimeMillis() - start));

start = System.currentTimeMillis();

jdomTest();

System.out.println("jdom時長:" + (System.currentTimeMillis() - start));

}

}


正在回答

2 回答

jdom和dom4j其中一個的包正常導入 另一個要加上類所在的包名

像這樣https://img1.sycdn.imooc.com//5b1cb9f60001c19a08730053.jpg

0 回復 有任何疑惑可以回復我~

因為幾個方法里都有Document對象,系統認為他們是同一個包里的同一種Document對象,所以創建時應該加上該Document類所在的包名,如org.w3c.dom.Document document = db.parse("book.xml")或

org.dom4j.Document?document = reader.read("res/book.xml");或

org.jdom2.Document?document = saxbuilder.build(isr);,這樣就不會出錯了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

java中導入org.jdom.Document和org.dom4j.Document沖突

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號