前面的話
本文主要講解有關dom4j技術和xpath配合下的優化!
目錄:
為什麼需要dom4j一 為什麼需要dom4jdom4j怎麼用
xpath怎麼配合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...