摘要:解析獲取解析器獲取文檔獲取根節點獲取根節點下所有的子節點,也可以根據標簽名稱獲取指定的直接點獲取元素的名稱和里面的文本創建創建節點創建屬性設置文本設置關系關于解析先講到這里了,請繼續關注樂字節,后續超級干貨奉上,快快樂樂學。
大家好,樂字節的小樂又來了,Java技術分享哪里少的了小樂!上次我們說了可擴展標記語言XML之二:XML語言格式規范、文檔組成,本文將介紹重點——XML解析。
基本的解析方式有兩種:一種叫 SAX,另一種叫 DOM。
SAX(Simple API for XML)是基于 事件流的解析,DOM(Document Object Model)是基于 XML 文檔樹結構的解析。SAX:效 率高,數據量小,僅一次獲取 。
DOM:整顆樹加載到內存中,耗內存,可多次獲取。
一、DOM 解析與 js 中的類似,使用 JAXP(Java API for XML Parsing),即:用于 XML 解析的 Java API.
DOM(Document Object Model, 文檔對象模型),在應用程序中,基于 DOM 的 XML
分析器將一個 XML 文檔轉換成一個對象模型的集合(通常稱為 DOM 樹),應用程序正是通過對這個對象模型的操作,來實現對 XML 文檔數據的操作。
XML 本身是以樹狀的形式出現的,所以 DOM 操作的時候,也將按章樹的形式進行轉換。 在整個 DOM 樹種,最大的地方指的是 Document,表示一個文檔,在這個文檔中存在一個根節點。
注意:在使用 DOM 操作的時候,每一個文字的區域也是一個節點,稱為文本節點。
1、核心操作接口在 DOM 解析中有以下四個核心的操作接口
Document : 此接口代表了整個 XML 文檔,表示的是整棵 DOM 樹的根,提供了對文檔中的數據進行訪問和操作的入口,通過 Document 節點可以訪問 XML 文件中所有的元素內容。
Node : 此接口在整個 DOM 樹種具有舉足輕重的低位,DOM 操作的核心接口中有很大 一部分接口是從 Node 接口繼承過來的。例如:Document、Element 等接口,在 DOM 樹種,每一個 Node 接口代表了 DOM 樹種的一個節點。
NodeList : 此接口表示的是一個節點的集合,一般用于表示有順序關系的一組節點,
例如:一個節點的子節點,當文檔改變的時候會直接影響到 NodeList 集合。
NamedNodeMap : 此接口表示的是一組節點和其唯一名字對應的一一對應關系,本
接口主要用于屬性節點的表示上。
2、DOM 解析過程如果一個程序需要進行 DOM 解析讀取操作的話,也需要按照如下的步驟進行:
① 建 立 DocumentBuilderFactory : DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
②建立 DocumentBuilder: DocumentBuilder builder = factory.newDocumentBuilder();
③建立 Document : Document doc = builder.parse(“要解析的文件路徑”);
④建立 NodeList : NodeList nl = doc.getElementsByTagName(“讀取節點”);
⑤進行 XML 信息讀取
DOM 操作除了可以進行解析外,也可以進行文檔的生成
如果想要生成 XML 文件,則在創建文檔的時候,就應該使用 newDocument()方法
如果要將 DOM 的文檔輸出,本身是比較麻煩的 。一次編寫多次 copy
public static void createXml() throws Exception{ //獲取解析器工廠 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //獲取解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //創建文檔 Document doc=builder.newDocument(); //創建元素、設置關系 Element root=doc.createElement("people"); Element person=doc.createElement("person"); Element name=doc.createElement("name"); Element age=doc.createElement("age"); name.appendChild(doc.createTextNode("shsxt")); age.appendChild(doc.createTextNode("10")); doc.appendChild(root); root.appendChild(person); person.appendChild(name); person.appendChild(age); //寫出去 // 獲得變壓器工廠 TransformerFactory tsf=TransformerFactory.newInstance(); Transformer ts=tsf.newTransformer(); //設置編碼 ts.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //創建帶有DOM節點的新輸入源,充當轉換Source樹的持有者 DOMSource source=new DOMSource(doc); //充當轉換結果的持有者 File file=new File("src/output.xml"); StreamResult result=new StreamResult(file); ts.transform(source, result); }二、SAX 解析
SAX(Simple API for XML)解析是按照 xml 文件的順序一步一步的來解析。SAX 沒有官方 的標準機構,它不屬于任何標準阻止或團體,也不屬于任何公司或個人,而是提供任何 人使用的一種計算機技術。
SAX(Simple API for XML,操作 XML 的簡單接口),與 DOM 操作不同的是,SAX 采用的 是一種順序的模式進行訪問,是一種快速讀取 XML 數據的方式。當使用 SAX 解析器進行操作的時候會觸發一系列的事情,當掃描到文檔(document)開始與結束、元素 (element)開始與結束時都會調用相關的處理方法,并由這些操作方法作出相應的操 作,直至整個文檔掃描結束。
如果要想實現這種 SAX 解析,則肯定首先建立一個 SAX 的解析器
// 1、創建解析器工廠 SAXParserFactory factory = SAXParserFactory.newInstance(); // 2、獲得解析器 SAXParser parser = factory.newSAXParser(); // SAX解析器 ,繼承 DefaultHandler String path = new File("resource/demo01.xml").getAbsolutePath(); // 解析 parser.parse(path, new MySaxHandler());三、DOM4j 解析
dom4j 是一個簡單的開源庫,用于處理 XML、 XPath 和 XSLT,它基于 Java 平臺,使用 Java 的集合框架,全面集成了 DOM,SAX 和 JAXP。下載路徑:
http://www.dom4j.org/dom4j-1....
http://sourceforge.net/projec...
可以使用 DOM4J 進行 XML 文件的讀、寫操作
DOM4J 與 JDOM 一樣都屬于一個免費的 XML 開源組建,但是由于現在的開發框架中使 用該技術較多,比如 Hibernate、Spring 等都使用 DOM4J 這個功能,所以作為介紹, 大家可以對該組件有一個了解。并沒有誰好誰壞,一般框架使用 DOM4J 較多,而我們平時如果要用則 JDOM 較常見。 可以發現 DOM4J 發揮了很多新特性,比如輸出格式就可以很好解析。
File file = new File("resource/outputdom4j.xml"); SAXReader reader = new SAXReader(); // 讀取文件作為文檔 Document doc = reader.read(file); // 獲取文檔的根元素 Element root = doc.getRootElement(); // 根據跟元素找到全部的子節點 Iteratoriter = root.elementIterator(); while(iter.hasNext()){ Element name = iter.next(); System.out.println("value = " + name.getText()); }
創建
// 使用DocumentHelper來創建 Document對象 Document document = DocumentHelper.createDocument(); // 創建元素并設置關系 Element person = document.addElement("person"); Element name = person.addElement("name"); Element age = person.addElement("age"); // 設置文本 name.setText("shsxt"); age.setText("10"); // 創建格式化輸出器 OutputFormat of = OutputFormat.createPrettyPrint(); of.setEncoding("utf-8"); // 輸出到文件 File file = new File("resource/outputdom4j.xml"); XMLWriter writer = new XMLWriter(new FileOutputStream(new File(file.getAbsolutePath())),of); // 寫出 writer.write(document); writer.flush(); writer.close();四、JDOM 解析
下載路徑: http://www.jdom.org/downloads...
JDOM 是一種使用 XML 的獨特 Java 工具包,用于快速開發 XML 應用程序。JDOM 是一個開源項目,它基于樹形結構,利用純 Java 的技術對 XML 文檔實現解析、生成、序列 化及多種操作。
JDOM 解析
掌握 JDOM 開發工具的使用及產生原理
可以使用 JDOM 進行讀取或寫入的操作
在 W3C 本身提供的 XML 操作標準,DOM 和 SAX,但是從開發角度上看,DOM 和 SAX
本身是各有特點的,DOM 可以修改,但不適合讀取大文件,而 SAX 可以讀取大文件,
但是本身不能修改所謂的 JDOM = DOM 的可修改 + SAX 的讀取大文件 。
JDOM 本身是一個免費的開源組建,直接從 http://www.jdom.org 上下載 ,下載后解壓,將 jdom.jar 包拷貝到 Tomcat 目錄(項目)的 lib 中 。
JDOM 主要操作的類:
我們發現 JDOM 的輸出操作要比傳統的 DOM 方便得多,而且也更加直觀,包括在輸出
的時候都很容易了。
此時觀察到的是 JDOM 對于 DOM 解析的支持,但是也說,JDOM 本身也支持了 SAX 的
特點;所以,可以使用 SAX 進行解析操作。
解析
// 獲取SAX解析器 SAXBuilder builder = new SAXBuilder(); File file = new File("resource/demo01.xml"); // 獲取文檔 Document doc = builder.build(new File(file.getAbsolutePath())); // 獲取根節點 Element root = doc.getRootElement(); System.out.println(root.getName()); // 獲取根節點下所有的子節點, 也可以根據標簽名稱獲取指定的直接點 Listlist = root.getChildren(); System.out.println(list.size()); for(int x = 0; x 創建
// 創建節點 Element person = new Element("person"); Element name = new Element("name"); Element age = new Element("age"); // 創建屬性 Attribute id = new Attribute("id","1"); // 設置文本 name.setText("shsxt"); age.setText("10"); // 設置關系 Document doc = new Document(person); person.addContent(name); name.setAttribute(id); person.addContent(age); XMLOutputter out = new XMLOutputter(); File file = new File("resource/outputjdom.xml"); out.output(doc, new FileOutputStream(file.getAbsoluteFile()));關于XML解析先講到這里了,請繼續關注樂字節,后續Java超級干貨奉上,快快樂樂學Java。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110395.html
摘要:當今廣泛使用的標記語言是超文本標記語言,和可擴展標記語言。標記語言廣泛應用于網頁和網絡應用程序。羋月與楚公子黃歇青梅竹馬,真心相愛,但被作為嫡公主羋姝的陪嫁媵侍遠嫁秦國。目前只有一個版本,即是自描述數據,使用現有的國際標準。 哈嘍大家好啊,樂字節小樂又來給大家分享Java技術文章了。上次已經講完了Java多線程相關知識,這次文章將講述可擴展標記語言XMLshowImg(https://...
摘要:當今廣泛使用的標記語言是超文本標記語言,和可擴展標記語言。標記語言廣泛應用于網頁和網絡應用程序。羋月與楚公子黃歇青梅竹馬,真心相愛,但被作為嫡公主羋姝的陪嫁媵侍遠嫁秦國。目前只有一個版本,即是自描述數據,使用現有的國際標準。 哈嘍大家好啊,樂字節小樂又來給大家分享Java技術文章了。上次已經講完了Java多線程相關知識,這次文章將講述可擴展標記語言XMLshowImg(https://...
摘要:上一篇文章,小樂給大家帶來了新特性之,接下來本文將會給大家介紹新特性之前言通過發布新的來進一步加強對日期與時間的處理。 上一篇文章,小樂給大家帶來了Java8新特性之Optional,接下來本文將會給大家介紹Java8新特性之Date API 前言: Java 8通過發布新的Date-Time API來進一步加強對日期與時間的處理。 舊版的 Java 中,日期時間 API 存在諸多問題...
摘要:大家好,樂字節的小樂又來了,上一篇是樂字節繼承與權限修飾,也是屬于繼承的,今天繼續繼承方法重寫和關鍵字。三關鍵字表示最終的。修飾類,表示該類不能被繼承修飾方法,表示該方法不能被重寫修飾屬性,表示常量,值一旦確定不可改變。 大家好,樂字節的小樂又來了,上一篇是:樂字節Java|JavaBean、繼承與權限修飾,也是屬于Java繼承的,今天繼續Java繼承-方法重寫、super和final...
摘要:在成員方法中或構造器中隱式的傳遞。作用如下在構造器中只能放在第一行屬性避免屬性和形參局部變量同名,發生就近原則實參列表構造器的首行調用其他構造器。關鍵字靜態的公共的。構造塊,先于構造器執行,每創建一個對象執行一次。 大家好,我是樂字節的小樂,從本文開始將會給大家講述Java繼承,一下是Java繼承的知識圖譜:showImg(https://segmentfault.com/img/bV...
閱讀 3729·2021-11-24 09:39
閱讀 3444·2019-08-30 15:56
閱讀 1370·2019-08-30 15:55
閱讀 1031·2019-08-30 15:53
閱讀 1919·2019-08-29 18:37
閱讀 3601·2019-08-29 18:32
閱讀 3128·2019-08-29 16:30
閱讀 2918·2019-08-29 15:14