Java實(shí)現(xiàn)解析并生成xml原理實(shí)例詳解
XML解析:
- * 解析xml可以做:
- * 如果xml作為配置文件:讀取
- * 如果xml作為傳輸文件:寫,讀
xml解析思想:
- * DOM:將文檔加載進(jìn)內(nèi)存,形成一顆dom樹(shù)(document對(duì)象),將文檔的各個(gè)組成部分封裝為一些對(duì)象。
- * 優(yōu)點(diǎn):因?yàn)?,在?nèi)存中會(huì)形成dom樹(shù),可以對(duì)dom樹(shù)進(jìn)行增刪改查。
- * 缺點(diǎn):dom樹(shù)非常占內(nèi)存,解析速度慢。
Document
Element
Text
Attribute
Comment
* SAX:逐行讀取,基于事件驅(qū)動(dòng)
* 優(yōu)點(diǎn):不占內(nèi)存,速度快
* 缺點(diǎn):只能讀取,不能回寫
xml常用的解析器:
- * JAXP:sun公司提供的解析。支持dom和sax。(不常用)
- * JDOM:
- * DOM4J:dom for java民間方式,但是是事實(shí)方式。非常好。 支持dom
1.導(dǎo)入jar包 dom4j.jar
2.創(chuàng)建解析器
SAXReader reader = new SAXReader();
3.解析xml 獲得document對(duì)象
Document document = reader.read(url);
- * XPATH:專門用于查詢
- * 定義了一種規(guī)則。
- * 使用的方法:
- * selectSingleNode():
- * selectNodes():
使用步驟:
1、注意:要導(dǎo)包 jaxen...jar
2、創(chuàng)建解析器
SAXReader reader = new SAXReader();
3、解析xml 獲得document對(duì)象
Document document = reader.read(url);
* 解析XML:
// 1、得到某個(gè)具體的節(jié)點(diǎn)內(nèi)容:第2本書的書名--》葵花寶典
// 2、遍歷所有元素節(jié)點(diǎn)
XPath:
- // nodename 選取此節(jié)點(diǎn)。
- // / 從根節(jié)點(diǎn)選取。
- // // 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。
- // .. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
- // @ 選取屬性。
- // [@屬性名] 屬性過(guò)濾
- // [標(biāo)簽名] 子元素過(guò)濾
例子:
/* demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book name="Harry Potter">
<author>J.K. Rowling</author>
<price>29.90$</price>
</book>
<book name="冰與火之歌">
<author>馬丁</author>
<price>28.90$</price>
</book>
</books>
*/
@Test
public void test1() throws DocumentException{
SAXReader reader = new SAXReader();
Document doc = reader.read("./src/demo.xml");
Element root = doc.getRootElement();
Element book1 = root.element("book");
System.out.println(book1.getPath());
System.out.println(book1.elementText("price"));
List<?> list = root.elements("book");
Element book2 = (Element) list.get(1);
System.out.println(book2.attributeValue("name"));
for(Iterator<?> it = book1.elementIterator();it.hasNext() ; ){
Element ele = (Element) it.next();
System.out.println(ele.getName()+" : "+ele.getText());
}
}
@Test
public void test2() throws Exception{//使用 XPath,只用于快速查詢,需要用jaxen...jar包
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("src/demo.xml"));
Node node = doc.selectSingleNode("/books/book[2]/author");//需要jaxen.jar包
String s = node.getText();
System.out.println(s);
node = doc.selectSingleNode("/books/book[2]/@name");
s = node.getText();
System.out.println(s);
List<Node> booknames = doc.selectNodes("/books//@name");
for (Node node1 : booknames) {
System.out.println(node1.getText());
}
List<?> nodes = doc.selectNodes("/books/*/*");
for (int i=0; i<nodes.size(); ++i){
Node node1 = (Node) nodes.get(i);
System.out.println(node1.getName() + ": " + node1.getText());
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security注冊(cè)過(guò)濾器注意事項(xiàng)詳解
前兩天和小伙伴聊了 Spring Security+JWT 實(shí)現(xiàn)無(wú)狀態(tài)登錄,然后有小伙伴反饋了一個(gè)問(wèn)題,感覺(jué)這是一個(gè)我們平時(shí)寫代碼容易忽略的問(wèn)題,所以本文給大家介紹了Spring Security注冊(cè)過(guò)濾器注意事項(xiàng),需要的朋友可以參考下2024-06-06
idea2019版與maven3.6.2版本不兼容的解決方法
這篇文章主要介紹了idea2019版與maven3.6.2版本不兼容的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
多線程_解決Runnable接口無(wú)start()方法的情況
這篇文章主要介紹了多線程_解決Runnable接口無(wú)start()方法的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03

