1. 程式人生 > >利用JAXP和DOM4J解析XML

利用JAXP和DOM4J解析XML

前言

原創文章歡迎轉載,請保留出處。
若有任何疑問建議,歡迎回復。
郵箱:[email protected]

解析XML主要有兩種思想,一種是SAX(Simple API for XML),另一種是DOM(文件物件模型),其中在J2EE中,提供了JAXP來實現這兩種解析,本文主要利用JAXP實現SAX解析,同時介紹時下流行的DOM4J實現DOM解析。

SAX解析和DOM解析比較

  • SAX解析
    • 優點:效率高,當遇到大的XML檔案時,不需要掃描完檔案就可以操作。
    • 缺點:不能進行RUD操作,每次操作都要重新解析
  • DOM解析
    • 優點:只需要解析一次XML
    • 缺點:解析完成才能操作,遇到大的XML檔案時耗記憶體。

JAXP實現SAX解析

首先要有一個xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<測試><作者>maxwell_nc</作者><部落格>http://blog.csdn.net/maxwell_nc</部落格></測試>

引用一張經典圖來說明SAX解析
sax

接下來寫程式碼:

package maxwell;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import
org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class SaxPaserDemo { public static void main(String[] args) throws Exception { //獲取SAX解析器工廠 SAXParserFactory factory = SAXParserFactory.newInstance(); //通過工廠獲取SAX解析器
SAXParser parser = factory.newSAXParser(); //獲取XML閱讀器 XMLReader reader = parser.getXMLReader(); //關聯事件解析器 reader.setContentHandler(new MyContentHandler()); //解析XML檔案 reader.parse("src/maxwell/demo.xml"); } } /*DefaultHandler是ContentHandler介面介面卡*/ class MyContentHandler extends DefaultHandler{ @Override public void startDocument() throws SAXException { // 掃描到xml文件開始 System.out.println("xml解析開始"); } @Override public void endDocument() throws SAXException { // 掃描到xml文件結束 System.out.println("xml解析結束"); } @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // 發現開始標籤,列印標籤名 System.out.println("<"+name+">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 列印標籤體 System.out.println(new String(ch, start, length)); } }

利用DOM4J實現DOM解析

SAX解析最大缺點就是不能RUD,而DOM可以,無奈本身JAXP的效能低下,所以現在流行使用DOM4J解析XML。
利用DOM4J來解析XML,程式碼實現上更加簡單簡潔。

package maxwell;

import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class Dom4jDemo {

    public static void main(String[] args) throws Exception {
        //利用dom4j獲取XML閱讀器
        SAXReader reader = new SAXReader();
        //獲取document物件
        Document document = reader.read("src/maxwell/demo.xml");
        //獲取根節點物件
        Element root = document.getRootElement();

        //列印標籤體
        System.out.println(root.element("作者").getText());
        System.out.println(root.element("部落格").getText());

        //新增節點並新增屬性,設定標籤體
        Element newEle = DocumentHelper.createElement("新增節點");
        newEle.addAttribute("測試", "test");
        newEle.setText("測試dom4j的新增節點功能");
        root.add(newEle);

        //寫回檔案
        XMLWriter writer  = new XMLWriter(new FileOutputStream("src/maxwell/demo.xml"),OutputFormat.createPrettyPrint());
        writer.write(document);
        writer.close();
    }


}

而且帶有美化輸出的功能,修改後:
修改XML輸出

總結

實際上無論JAXP還是DOM4J都支援DOM和SAX解析,但DOM4J操作都非常簡單,而且效能要比JAXP強大,但要注意,要使用DOM4J必須匯入jar檔案。

相關推薦

利用JAXPDOM4J解析XML

前言 原創文章歡迎轉載,請保留出處。 若有任何疑問建議,歡迎回復。 郵箱:[email protected] 解析XML主要有兩種思想,一種是SAX(Simple API for XML),另一種是DOM(文件物件模型),其中在J2EE中,提供了

xml簡介dom4j解析xml重要方法

1.xml(可擴充套件標記語言)的概述 與html的區別: xml: 描述資料,用於儲存和傳輸資料。標籤都是自定義的 html:顯示資料,標籤都是預定義的 注意事項: 文件宣告必須在第一行 只有一個根標籤 元素只能

利用DOMSAX解析XML文件

DOM:  (文件物件模型)  --將xml檔案的節點解析成java語言中的物件 優點:可以對整個文件進行增刪改查, 缺點:佔用記憶體相對多【可以根據需要調整JVM的記憶體大小:例如在eclipse中

在java項目中怎樣利用Dom4j解析XML文件獲取數據

avi conf get 自己 mar dom4j eas localhost b2c 在曾經的學習.net時常常會遇到利用配置文件來解決項目中一些須要常常變換的數據。比方數據庫的連接字符串兒等。這個時候在讀取配置文件的時候。我們一般會用到一個雷configuratio

JAVA利用dom4j解析xml轉map

dom4j maven依賴 <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> <dependency> <groupId>dom4j</groupI

在java專案中如何利用Dom4j解析XML檔案獲取資料

在以前的學習.net時經常會遇到利用配置檔案來解決專案中一些需要經常變換的資料,比如資料庫的連線字串兒等。這個時候在讀取配置檔案的時候,我們通常會用到一個雷configuration,通過這個類來進行

利用dom4j解析.xml之查詢標籤

package cn.zdh.dom4j_read; //利用dom4j查詢標籤 import java.io.File; import java.util.Iterator; import java

利用dom4j解析XML報文,解析出所有的節點以及內容

先說一下最開始自己的需求吧,我需要把一段xml的報文裡面最裡面一層的所有節點以及內容全部取出來,按照常規方法都是根據節點名字去取吧  雖然寫出來了 但是很繁瑣  覺得程式碼很冗餘  後來想到了遞迴  用遞迴去取 果然簡單了很多   下面直接貼程式碼了import java.u

使用dom4j解析xml格式字串,獲取標籤屬性內容

本文解析XML格式字串引入的是: dom4j-1.6.1.jar具體程式碼如下: /**      * 解析xml字串,獲取各項屬性內容      * readXML方法描述:      *      * @author : sunyan      * @createTi

dom4j 解析xml 獲取節點值節點屬性

Document document = null; //xmlString為String型別的xml格式的資料 String xmlString="<?xml version=\"1.0\" e

利用dom4j解析xml檔案匯入MySql

#新增pom.xml的依賴架包 因為我的專案是基於Maven管理,有個父pom,所以不用新增版本號 <dependency> <groupId>dom4j</groupId> <ar

dom4j解析xml

nodes 屬性 介紹 color 後繼 util node src -- 首先我要說明,本文全部參考http://blog.csdn.net/yyywyr/article/details/38359049; 推薦:http://www

使用dom4j解析xml

iterator 問題 getclass etc tac iter throws xml文件 encoding 一.代碼(java代碼): 1. 使用InputStream: /** * 02 * 使用此種方式獲得InputStream,

【學習筆記】關於DOM4J:使用DOM4J解析XML文檔

文本 class 中產 獲取 ber exce int() logs hone 一、概述 DOM4J是一個易用的、開源的庫,用於XML、XPath和XSLT中。采用了Java集合框架並完全支持DOM、SAX、和JAXP。 DOM4J最大的特色是使用大量的接口,主要接口都在o

使用dom4j 解析xml

package png servle dom4j read .cn cati nbsp test web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://www.exa

Dom4j解析XML基本操作

.org oot 進行 元素 ray ext2 single util ati Dom4j 是一個易用的、開源的庫,用於 XML , XPath 和 XSLT 。它應用於 Java 平臺,采用了 Java 集合框架並完全支持 DOM , SAX 和 JAXP 。 要使用

domxpath解析xml

學生 auth term roc select 方法 try nodes 屬性 import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.D

關於dom4j解析xml

int 結果 iterator get next info tor 小白 節點 一:相關jar包 dom4j-1.6.1.jar 二:用例xml文件 三:解析 註:可能有的小白不知道如果獲取節點,so,you can: for (Iterator<Element

在java中使用dom4j解析xml

() while 9.png eval ted eva har main root 創建xml文檔並輸出到文件 import java.io.File; import java.io.FileOutputStream; import org.dom4j.Documen

java基礎 xml 使用dom4j解析 xml文件 servlet根據pattern 找到class

col demo gpo string java OS pattern mapping unit package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util