Dom4J解析技術

2022-02-25 04:53:15 字數 3422 閱讀 7550

前面的話

本文主要講解有關dom4j技術和xpath配合下的優化!

目錄:

為什麼需要dom4j

dom4j怎麼用

xpath怎麼配合dom4j

一  為什麼需要dom4j

一門技術出現必定是有原因的,一來是解決某方面技術問題,再者可能是優化效能。

xmldom 簡單方便,可以將xml文件以"dom樹"的形式裝進記憶體,節點物件操作元素。但

xml資料量較大時,消耗記憶體也大。sax訪問元素方便,不能對元素crud。都是有明顯缺點的。

dom4j的出現,正好優化了xml解析。

dom4j和xmldom 從操作上看很相似,可以說只是對應的api不一樣。

值得注意的是:

包,裡面有api(index-html),jar包等。

二 dom4j怎麼用

準備好示例xml

1

<?xml version="

1.0" encoding="

utf-8

"?>23

4"sp001

"> 5小劉

612 7

100 890910

"sp002

">

11小明

1212

1398

1490 15

16"sp003

">

17小張

1812

1983

2091 21

22class>

(1)訪問元素

element e= document.getrootelement().element('stu');

element namenode= (element) e.elements("name").get(0); //等價於e.element('name');

system.out.println( namenode.gettext());

//小明

(2)插入元素

element stuele=documenthelper.createelement("stu"); 

stuele.addattribute("id", "sp003"); //新增屬性(id)

element nameele=documenthelper.createelement("name");

nameele.settext("宋江");

element ageele=documenthelper.createelement("age");

ageele.settext("11");

element mathele=documenthelper.createelement("math");

mathele.settext("100");

//將元素掛到stu上

stuele.add(nameele);

stuele.add(ageele);

stuele.add(mathele);

//重新整理,這很重要。

(3)修改

(4)刪除

find:訪問屬性時: node.elements('nodename');  裡面的元素只能是node的直接子節點,不可以是孫子(包括以後)。也不能根據id,name屬性來訪問元素。

那麼為提高查詢效率,需要借助xpath;

三:xpath怎麼配合dom4j

(1)什麼是xpath

xpath操作xml有點像sql語言查詢資料庫的效果,簡單的說,xpath是一種查詢格式。

示例xml

<?xml version="1.0" encoding="utf-8"?>

b1c1

b2 b3

看下面xpath配合dom4j------注意xpath不單獨使用

list list=doc.selectnodes("/aaa/bbb");    //  "/aaa/bbb"就是xpath格式

system.out.println(list.size()); //2;

//(1)xpath最經典的用法一

element list1= (element)doc.selectsinglenode("/aaa/bbb[1]");

// 拿到屬性和text

system.out.println("id||"+list1.attributevalue("id"));

system.out.println("textcontent||"+list1.gettext());

// (2)經典用法二

//通過id,name屬性選出元素,相等於getelementbyid("id");getelementsbytagname()

//取出id=『sp001』的bbb元素;

element node= (element)(doc.selectnodes("//bbb[@id='sp001']").get(0));

system.out.println(node.gettext()); //b1;

//取出name屬性為"bbb"的bbb元素

element n= (element) doc.selectsinglenode("//bbb[@name='bbb'][1]");

system.out.println(n.attributecount()); //2

xpath細節:

(1) "/aaa/bbb"-----aaa下的bbb集合(只是子節點), /有點路徑的意思。

再者:"/aaa/bbb[1]"----就是具體指第1個bbb元素(這裡的1不是index=0開始的,就是實際上的1).

(2) "//aaa"-----指的是xml中全部aaa元素;

比如:"//aaa/bbb"---父元素是aaa的全部bbb元素集合(list)

(3) "//bbb[@id='sp001']"-----取出id=『sp001』的bbb元素集合(list)

"//bbb[@name="bbb"]"-----取出name="bbb"的元素集合(list)

"//bbb[@id='sp001'][1]''----取出第1個元素

find:  通過xpath的修飾,dom4j的查詢功能就很強大了。適用於大多數情況,一般解析xml文件都是使用它。

xml檔案解析 DOM4J

讀取並解析xml文件 讀寫xml文件主要依賴於org.dom4j.io包,其中 提供domreader 和saxreader 兩類不同方式,而呼叫方式是一樣的。這就是依靠介面的好處。從檔案讀取 xml,輸入檔名,返回 xml文件 publicdocument read string filename...

DOM4J解析XML文件

dom4j是乙個簡單 靈活的開放源 的庫。疊代器 iterator s public static void listelementattribut element element public static void createelement doment doc xml xml schema ...

dom4j解析xml檔案

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