dom4j解析中的幾個對象
node
--branch
--document
--element
--commment
--attribute
--text
branch
--document
--element
jaxp解析中的幾個對象
node
--document
--element
--commment
--attr
--text
dom4j解析
中所有對象都是node對象的子節點,也就是說它把說有對象都單獨分離出來看成一個對象,而branch是一個對常用節點的封裝和關聯,如Element對象就包含了有attribute對象和text對象,而document對象就封裝了所有節點對象
jaxp的dom解析
jaxp的dom解析方式沒有branch節點,沒有將各個節點進行封裝,所有操作的都是node節點;
而且因為節點間沒有關聯屬性,所以在創建節點後需要進行關聯,刪除節點時需要找父節點
細節:node的節點沒有獲得attribute的方法,只有Element才有獲得attribute的方法
dom4j解析,jaxp的dom解析的共同點
1.通過根據條件查詢後的結果都是一個list集合
2.修改text或textContent時既可以用Node也可以用Element
xml文檔解析方式有兩種dom和sax,常用開發工具有兩種jaxp,dom4j
jaxp:將兩種解析方法分開了,dom解析和sax解析,sax解析方法沒有寫方法
dom4j:把兩種解析方式結合起來,取文件時采用sax解析,寫文件時采用dom解析,繼承了兩種解析方式的優點
關於sax解析:
sax解析其實也是把文檔加載進內存中,但是這個緩存區只有3M左右的大小(可以用一個大文檔,然後打印characters方法中的start值觀察),如果文檔很小,全部加載進內存,如果文檔很大,緩存區慢後會自動清空緩存區,繼續加載後續數據,這個緩存數組就是characters()方法參數列表中的ch。
也就是說,如果要讀取一個小文檔,只需要復寫這一個方法就可以了,然後將字符數組轉成字符串打印就可以了,或者根據角標取響應的數據。
public void characters(char[] ch, int start, int length){
System.out.println(new String(ch,10,2));
}
然後文檔的讀取其實就相當於IO流中的指針移動