XML文檔解析技術之SAX解析與DOM解析
一、SAX解析
SAX解析xml的方式是一種快速解析xml文檔的手段,優點是效率高,適用于解析量不大的xml文檔。
使用案例: 使用sax的方式將如下的xml文檔的用戶信息解析出來。
1)引入dom4j依賴
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
2) 新建一個xml文檔,一個user標簽標示一個人物對象
<web>
<user>
<username>張三</username>
<password>abc</password>
<age>23</age>
</user>
</web>
3) 此處有2種方式來獲取resource目錄下的文檔:
第一種方式:通過絕對路徑的方式獲取
String path=test.class.getClassLoader().getResource("user.xml").getPath();
System.out.println("絕對路徑path:"+path);
//path:/F:/eclipseWorkspace/saxreader-test/target/classes/user.xml
第二種方式: 直接使用相對路徑的方式
路徑為: src\\main\\resources\\user.xml
package com.hbust.demo;
import java.io.File;
import java.net.URL;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;
/**
*author:bingbing
*日期:2020年2月24日
*時間:上午9:56:01
*/
public class test {
/**
* 使用sax方式解析xml
*/
public static void main(String []args) {
SAXReader reader=new SAXReader();
//載入文件,獲取絕對路徑
String path=test.class.getClassLoader().getResource("user.xml").getPath();
System.out.println("絕對路徑path:"+path);
//path:/F:/eclipseWorkspace/saxreader-test/target/classes/user.xml
//相對路徑是src\\main\\resources\\user.xml
Document doc = null;
try {
doc = reader.read(new File("src\\main\\resources\\user.xml"));
} catch (DocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//獲取根節點對象
Element root=doc.getRootElement();
System.out.println("root:"+root.getName());
//獲取用戶名、密碼、和年齡信息
List<Element> elements=root.elements("user");
for(Element e: elements) {
String username=e.elementText("username");
String password=e.elementText("password");
String age=e.elementText("age");
System.out.println("username:"+username+"password:"+password+"age:"+age);
}
System.out.println(root);
}
}
二、DOM解析
Document適用于解析文件比較大的xml, 優點是對于大量數據下可以快速解析訪問,缺點初次加載需要將文檔的所有標簽以節點的形式全部加載到內存里,比較耗時。
使用案例: 使用DOM的方式將如下的xml文檔的用戶信息解析出來。
1)DOM解析的方式不需要引入外部依賴,jdk內置有
2) 此處需要將獲取到的node轉換為element,每一個標簽都可以getElementsByTagName方法獲取為節點,然后再取得節點的信息。
package com.hbust.demo;
import java.io.IOException;
import java.util.Arrays;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
*author:bingbing
*日期:2020年2月24日
*時間:上午11:06:33
*/
public class test {
//使用docoument方式解析xml文檔
public static void main(String[]args) {
DocumentBuilderFactory documentBuilderFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = null;
try {
documentBuilder = documentBuilderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Document document = documentBuilder.parse(
test.class.getClassLoader().getResourceAsStream("user.xml"));
NodeList lists=document.getElementsByTagName("user");
for(int i=0;i<lists.getLength();i++) {
Node node=lists.item(i);
Element ele=(Element)node;
String username=ele.getElementsByTagName("username").item(0).getTextContent();
System.out.println("username:"+username);
}
System.out.println();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
智能推薦
解析技術3-dom4j解析xml文檔
我們在前面已經已知Jaxp(sun公司),Jdom,dom4j,XStream這四個用來解析xml文檔的開發包,并且對比了他們的各自特點。 dom4j更加常用,首先我們要下載對應的jar包,導入到工程里。 然后右鍵這個jar包,buildpath dom4j的官方網站或文檔里寫了詳細的快速start方法,有簡單的示例代碼,不需要記憶,隨查隨用。 我們來簡單測試一下: 一、讀取 二、添加元素 這里實...
Java中xml解析 SAX、PULL、DOM
目錄 一,什么是XML: 二,XML的解析 一,什么是XML: 定義:XML指的是可擴展標記語言,主要用來傳輸和存儲數據。 XML主要語法規則: XML標簽需要用戶自定義 XML標簽使用時要關閉<標簽名> </標簽名>成對存在 XML標簽對區分大小寫 XML標簽必須正確的嵌套 XML文檔有且只有一個根元素 XML的屬性值要加引號 XML中的空格換行符等會被當做...
XML的DOM和SAX解析方式
昨天抽取并解析了一大批從微信鉤子收取到的小程序消息,它們都是用很復雜的XML表示的。平常不是很接觸XML,本文就隨便說說XML的兩種解析方式。 DOM解析方式 DOM即文檔對象模型(document object model)。根據W3C的描述,DOM是一套用于HTML和XML文檔的標準接口,它定義了文檔的邏輯結構,以及訪問或操作文檔的方式。 DOM Parser會將文檔解析為包含元素、屬性和文本...
XML解析___使用Dom or使用Sax
xml解析方式分為兩種,dom和sax dom:(Document Object Model,即對文檔對象模型)是W3C組織推薦的處理XML的一種方式 Sax:(Simple API for XML)不是官方標準,但它是xml社區事實上的標準,幾乎所有的xml解析器都支持它。 XML解析開發包 Jaxp、Jdom、dom4J 使用DOM解析XML介紹 DOM...
我的Android進階之旅------>Android中解析XML 技術詳解---->SAX解析、DOM解析、PULL解析...
XML在各種開發中都廣泛應用,Android也不例外。作為承載數據的一個重要角色,如何讀寫XML成為Android開發中一項重要的技能。今天就由我向大家介紹一下在Android平臺下幾種常見的XML解析和創建的方法。 在Android中,常見的XML解析器分別為SAX解析器、DOM解析器和PULL解析器,下面,我將一一向大家詳細介紹。 SAX解析器: SAX(Simple API for XML)...
猜你喜歡
XML介紹及DOM解析&SAX解析——學習筆記
目錄 一、XML簡介 (1)XML和HTML (2)什么是XML 二、XML元素VS節點 三、DOM方式解析XML原理 四、SAX方式解析XML原理 五、JDOM工具解析 六、DOM4J工具解析 一、XML簡介 (1)XML和HTML XML 被設計用來傳輸和存儲數據。 &nb...
XML之SAX解析XML實例
--------------------------------------------XML之SAX解析XML------------------------------------------ 一,前言 SAX是針對DOM解析XML內存占用大,查找速度慢的缺點而出現的解決方案。SAX解析器對XML文檔解析會從XML文檔開始位置起進行解析,同時根據已經定義好的事件處理器,來解決當前所解析的部分(...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...