1. 程式人生 > >XML解析之sax解析案例(一)讀取contact.xml檔案,完整輸出文件內容

XML解析之sax解析案例(一)讀取contact.xml檔案,完整輸出文件內容

一、新建Demo2類:


import java.io.File;

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

/**
 * 讀取contact.xml檔案,完整輸出文件內容
 * @author APPle
 *
 */
public class Demo2 {

	public static void main(String[] args)throws Exception {
		//1.建立SAXParser
		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
		//2.讀取xml檔案
		MyDefaultHandler2 handler = new MyDefaultHandler2();
		parser.parse(new File("./src/contact.xml"), handler);
		String content = handler.getContent();
		System.out.println(content);
	}

}

二、建立自定義MyDefaulthander2

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
 * SAX處理器程式
 * @author APPle
 */
public class MyDefaultHandler2 extends DefaultHandler {
	//儲存xml文件資訊
	private StringBuffer sb = new StringBuffer();
	
	//獲取xml資訊
	public String getContent(){
		return sb.toString();
	}
	

	/**
	 * 開始標籤
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		sb.append("<"+qName);
		//判斷是否有屬性
		if(attributes!=null){
			for(int i=0;i<attributes.getLength();i++){//int getLength() 返回此列表中的屬性個數。 
				//得到屬性名稱   id="001"
				String attrName = attributes.getQName(i);//String getQName(int index) 通過索引查詢屬性的 XML 限定(字首)名。 
				//得到屬性值
				String attrValue = attributes.getValue(i);//String getValue(int index) 通過索引查詢屬性的值。 
				sb.append(" "+attrName+"=\""+attrValue+"\"");
			}
		}
		sb.append(">");
	}
	
	/**
	 * 文字內容
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//得到當前讀取的文字
		String content = new String(ch,start,length);
		sb.append(content);
	}
	
	/**
	 * 結束標籤
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		sb.append("</"+qName+">");
	}
}
列印輸出結果:

<contactList>
    <contact id="001" name="eric">
        <name>張三</name>
        <age>20</age>
        <phone>134222223333</phone>
        <email>[email protected]</email>
        <qq>432221111</qq>
    </contact>
    <contact id="002" name="jacky">
        <name>eric</name>
        <age>20</age>
        <phone>134222225555</phone>
        <email>

[email protected]</email>
        <qq>432222222</qq>
    </contact>
</contactList>

相關推薦

XML解析sax解析案例讀取contact.xml檔案完整輸出內容

一、新建Demo2類: import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXP

樹狀解析深度優先演算法

  導讀:最近有一個解析樹的業務,之前參加過藍橋杯演算法比賽學過一些演算法。(還好沒有全部忘記哈哈)怕以後忘記這種思路特寫此博文。 一、深度優先,記得廣告中經常聽到過,抱著試試看的態度買了3個療程,效果不錯........  也經常聽人說過什麼車到山前必有路,船到橋頭自然直。哈哈,這種思想就是回溯思

java基礎I/O流------------字元流的檔案讀寫操作

一.流的概念: java的輸入輸出稱為流,流是一組有順序的集合。而流的本質則是資料傳輸 二.流的分類:                  1.根據處理的功能分為位元組流(InputStream,OutPutStrean)和字元流(Writer,Reader)  

GitGit的簡介安裝與本地倉庫可視化管理

ast src 目標 commit 合作 sta 方式 發的 問題 一.git歷史 同生活中的許多偉大事件一樣,Git 誕生於一個極富紛爭大舉創新的年代。Linux 內核開源項目有著為數眾廣的參與者。絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁

XML解析sax解析案例使用sax解析xml封裝成物件

Demo1類: import java.io.File; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; /**

使用XStream解析復雜XML並插入數據庫

針對 很多 trac ota print root parser 沒有 jdbc 環境: Springboot+mysql 我只想說jpa真的超級好用,準備深入研究一下~ 導入依賴: <dependency> <groupId>org.proj

XML解析——SAX解析

一、定義SAX,全稱 Simple API for XML,是一種以事件驅動的XML API 由於它是邊掃描邊解析,所以具有解析速度快、佔用記憶體小的有點。二、解析步驟1、獲取XML檔案資源,可以是XML檔案的輸入流或者檔案、uri。2、得到SAX解析器工廠(SAXParse

註冊中心 Eureka 原始碼解析 —— Eureka-Client 初始化 EurekaInstanceConfig

本文主要基於 Eureka 1.8.X 版本1. 概述2. EurekaInstanceConf

KING_U3D學習Unity Test Tools_官方例子解析

Unity Test Tools是Unity3D自帶的一個免費測試外掛,你可以在Asset store下載它,下載地址:https://www.assetstore.unity3d.com/en/#!/content/13802,然後匯入,完成後選單項會有Unity Te

Eureka 原始碼解析 —— 應用例項註冊發現註冊

// DiscoveryClient.javaboolean register() throws Throwable { logger.info(PREFIX + appPathIdentifier + ": registering service..."); EurekaHttpResponse&l

《Android 安全》AndroidManifest.xmlallowBackup屬性

前言 " android:allowBackup"是一個是否允許備份系統和使用者資料的屬性。 當這個標誌被設定為true時應用程式資料可以在手機未獲取 ROOT 的情況下通過adb除錯工具來備份和恢復。 案例分析 從應用商城裡下載一個“密碼本”之類的應用。 1. 使用An

Jetty9架構解析-Jetty配置及部署

2.1. Jetty配置概述 對於Web伺服器來說,可配置性是一項非常重要的指標(從軟體設計層面,我們也可以稱之為架構要素),它在很大程度上也會影響一款伺服器的適用範圍。之所以這麼說,是因為真實的部署場景千變萬化,只有做到靈活可配,我們才可以對其進行深度定

深入解析Mac OSX & IOS 作業系統

Unix 的系統目錄 OSX 是一個符合UNIX標準的系統,因此也有那些標準的UNIX具有的目錄結構 /bin UNIX中的二進位制程式,這是常用UNIX命令所在的地方 /sbin 系統程式,這些二進

微信支付接入完全解析Android客戶端2

前段時間在一個App中接入了微信支付功能,想來也穩定執行快一個月了,回頭想想自己接入微信支付時候踩過的坑,決定寫一篇自己當初想要搜尋的文章,文章準備分3篇完成。 第一篇:微信支付前期準備 第二篇:微信支付接入客戶端部分(以Android為例

基於逆波蘭表示式的公式解析器-演算法和思路

背景:        最近專案需要自己完成Excel的公式解析和求值,在Java中可以使用POI解析Excel公式然後求值。但是專案需要JS端和Java後端均需要支援公式解析,所以就需要自己寫一套了。

複習MyBatis基礎用法——XML對映檔案

簡介 什麼是 MyBatis ? MyBatis 是支援定製化 SQL、儲存過程以及高階對映的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 程式碼和手工設定引數以及抽取結果集。MyBatis 使用簡單的 XML 或註解來配置和對映基本體,將介面和

JVM——深入解析原理和執行機制類載入過程

       隔了好久終於把這篇文章補上了,最近在看《深入理解Java虛擬機器》,一本很不錯的書,必須值得一看。        由於本人對Java類的載入過程一直是一知半解,所以優先看了一下

JVM——深入解析原理和執行機制類載入器

      上次我們說了一下jvm中類載入的過程,大概有載入,連線(驗證,準備,解析),初始化這麼幾個步驟,當然要實現這些功能就需要有載入器,今天我們就來說說jvm中的類載入器。 一、分類

python框架 Tornado 學習筆記

tornado pythontornado 一個簡單的服務器的例子:首先,我們需要安裝 tornado ,安裝比較簡單: pip install tornado 測試安裝是否成功,可以打開python 終端,輸入: import tornado.https

python大法二-一些基礎

計算機編程 python 獨立博客 hello 解釋器 個人獨立博客出處:http://www.xbman.cn/出處:http://www.xbman.cn/article/3Python是一種解釋性計算機編程語言。采用縮進式語法,寫起來的感覺有點像排了版的shell,這裏要註意寫pyt