xml檔案解析 DOM4J

2021-04-13 02:22:58 字數 4045 閱讀 1054

1.

讀取並解析xml文件:

讀寫xml文件主要依賴於org.dom4j.io包,其中

提供domreader

和saxreader

兩類不同方式,而呼叫方式是一樣的。這就是依靠介面的好處。

// 

從檔案讀取

xml,輸入檔名,返回

xml文件

publicdocument

read(string

filename)throwsmalformedurlexception,

documentexception

其中,reader的read方法是過載的,可以從inputstream, file, url等多種不同的源來讀取。得到的document物件就帶表了整個xml。

根據本人自己的經驗,讀取的字元編碼是按照xml檔案頭定義的編碼來轉換。如果遇到亂碼問題,注意要把各處的編碼名稱保持一致即可。2.

取得root節點

讀取後的第二步,就是得到root節點。熟悉xml的人都知道,一切xml分析都是從root元素開始的。

publicelement

getrootelement(document

doc)

2.2訪問節點

list childrenlist = elt.elements();

list childrenlist = elt.elements("student");

element eltchild = elt.element("student");

2.3.訪問屬性

list  attrlist = elt.attributes();

attribute attr = elt.attribute("sn");

string attrvalue = elt.attributevalue("sn");

2.4.刪除元素和屬性

element eltstu = root.element("student");

root.remove(eltstu);

etl.remove(elt.attribute("sn"));

3.遍歷xml樹

dom4j提供至少3種遍歷節點的方法:

1) 列舉(iterator)

// 

列舉所有子節點

for(

iteratori=

root.elementiterator();

i.hasnext();

)

// 列舉名稱為

foo的節點

for(

iteratori=

root.elementiterator("

foo"

);i.hasnext();)

// 列舉屬性

for(

iteratori=

root.attributeiterator();

i.hasnext();

)2)遞迴

遞迴也可以採用iterator作為列舉手段,但文件中提供了另外的做法

publicvoidtreewalk()

publicvoidtreewalk(element

element)

else

}

}

3) visitor模式

最令人興奮的是dom4j對visitor的支援,這樣可以大大縮減**量,並且清楚易懂。了解設計模式的人都知道,visitor是gof設計模式之一。其主要原理就是兩種類互相保有對方的引用,並且一種作為visitor去訪問許多visitable。我們來看dom4j中的visitor模式(快速文件中沒有提供)

只需要自定乙個類實現visitor介面即可。

publicclassmyvisitorextendsvisitorsupport

publicvoidvisit(attribute

attr)

}

呼叫:root.accept(new myvisitor())

visitor介面提供多種visit()的過載,根據xml不同的物件,將採用不同的方式來訪問。上面是給出的element和attribute的簡單實現,一般比較常用的就是這兩個。visitorsupport是dom4j提供的預設介面卡,visitor介面的default adapter模式,這個模式給出了各種visit(*)的空實現,以便簡化**。

注意,這個visitor是自動遍歷所有子節點的。如果是root.accept(myvisitor),將遍歷子節點。我第一次用的時候,認為是需要自己遍歷,便在遞迴中呼叫visitor,結果可想而知。

4. xpath支援

dom4j對xpath有良好的支援,如訪問乙個節點,可直接用xpath選擇。

publicvoidbar(document

document)

例如,如果你想查詢

xhtml

publicvoidfindlinks(document

document)throwsdocumentexception

}

5. 字串與

xml的轉換

有時候經常要用到字串轉換為

xml或反之,

// xml

轉字串

document

document

=...;

string

text

=document.asxml();

// 字串轉

xml

string

text

= "james";

document

document

=documenthelper.parsetext(text);

6 用xslt

轉換xml

publicdocument

styledocument(

document

document,

string

stylesheet

)throwsexception

7. 建立xml

一般建立xml是寫檔案前的工作,這就像stringbuffer一樣容易。

publicdocument

createdocument()

8. 檔案輸出

乙個簡單的輸出方法是將乙個document或任何的node通過write方法輸出

filewriter

out=newfilewriter( "foo.xml"

);

document.write(out);

如果你想改變輸出的格式,比如美化輸出或縮減格式,可以用

xmlwriter

publicvoidwrite(document

document)throwsioexception

dom4j解析xml檔案

一 利用dom4j建立乙個內容如下的xml檔案sqlmapconfig.xml 步驟 1.建立乙個輸出流,指定建立的sqlmapconfig.xml檔案的位置 outputstream outputstream os new fileoutputstream d sqlmapconfig.xml 2...

dom4j解析XML檔案

dom4j解析xml檔案 匯入dom4j.jar包 建立xml檔案 xmlwriter writer null 宣告寫xml的物件 outputformat format outputformat.createprettyprint format.setencoding utf 8 設定xml檔案的...

dom4j解析XML檔案

匯入dom4j.jar包 建立xml檔案 xmlwriter writer null 宣告寫xml的物件 outputformat format outputformat.createprettyprint format.setencoding utf 8 設定xml檔案的編碼格式 string f...