1. 程式人生 > >XML解析之sax解析案例(二)使用sax解析把 xml文件封裝成物件

XML解析之sax解析案例(二)使用sax解析把 xml文件封裝成物件

Demo1類:


import java.io.File;
import java.util.List;

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

/**
 * 使用sax解析把 xml文件封裝成物件
 * @author APPle
 *
 */
public class Demo3 {

	public static void main(String[] args)throws Exception {
		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
		MyDefaultHandler3 handler = new MyDefaultHandler3();
		parser.parse(new File("./src/contact.xml"), handler);
		List<Contact> list = handler.getList();
		for (Contact contact : list) {
			System.out.println(contact);
		}
	}
}

MyDefaultHandler3類:

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
 * SAX處理程式
 * @author APPle
 *
 */
public class MyDefaultHandler3 extends DefaultHandler {
	//儲存所有聯絡人物件
	private List<Contact> list = new ArrayList<Contact>();
	
	public List<Contact> getList(){
		return list;
	}
	//儲存一個聯絡人資訊
	private Contact contact;
	/**
	 * 思路: 
	 * 	1)建立Contact物件
	 *  2)把每個contact標籤內容存入到Contact物件
	 *  3)把Contact物件放入List中
	 */
	//用於臨時儲存當前讀到的標籤名
	private String curTag;//用於方法跨度使用變數。

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		curTag = qName;
		//讀取到contact的開始標籤建立Contact物件,這裡說明了什麼時候建立Content物件最合適。
		if("contact".equals(qName)){
			contact = new Contact();
			
			//設定id值
			contact.setId(attributes.getValue("id"));//根據指定名字獲取id值
		}
	}
	
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		//當前文字內容
		String content = new String(ch,start,length);//String類構造方法獲取到當前文字的額內容。
		
		if("name".equals(curTag)){
			contact.setName(content);
		}
		
		if("age".equals(curTag)){
			contact.setAge(content);
		}
		
		if("phone".equals(curTag)){
			contact.setPhone(content);
		}
		
		if("email".equals(curTag)){
			contact.setEmail(content);
		}
		
		if("qq".equals(curTag)){
			contact.setQq(content);
		}
	}
	
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		//結束標籤後就設定null。這裡設定為null很重要。設定空是為了避免空格換行設定到物件的屬性中,空格換行進去了就把原來放進去的資料覆蓋掉。
		curTag = null;
		//讀到Contact的結束標籤把content物件放入List中
		if("contact".equals(qName)){
			list.add(contact);
		}
	}
}


相關推薦

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

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

企業分布式微服務雲SpringCloud SpringBoot mybatis Spring Boot屬性配置詳解

public profile 功能 tps with oot oschina 基本 ava 相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實現快速開發的便捷。我們在Spring Boot使用過程中,最直觀的感受就是沒有了原來自己整合S

Lucene7.2.1系列luke使用及索引的基本操作

系列文章: luke入門 簡介: 下載地址:https://github.com/DmitryKey/luke/releases Luke是一個用於Lucene/Solr/Elasticsearch 搜尋引擎的,方便開發和診斷

使用Qt開發文字編輯器:標籤頁式實現

Qt中相關的類 標籤頁俗稱Tab頁,Qt提供了QTableWidget用於建立基於Tab頁式的文件。使用QTableWidget,我們可以很方便得新增和刪除Tab、設定和獲取Tab頁上面的文字,設定當前的Tab。 實現 MainWindow類中維護

Java眼中的XML---檔案讀取SAX解析XML檔案

目錄 (一)SAX解析是什麼? (二)SAX解析和DOM解析的區別? (三)SAX方法解析XML的步驟 (四)SAX解析Java程式碼實現 (一)SAX解析是什麼? SAX(simple API for XML)是一種XML解析的

深入解析開源專案Universal-Image-Loader快取篇

Universal-Image-Loader 是一個優秀的圖片載入開源專案,Github地址在 (Github地址) ,很多童鞋都在自己的專案中用到了。優秀的專案從來都是把簡單留給開發者,把複雜封裝在框架內部。ImageLoader作為Github上S

android解析包時出現錯誤

這次的原因不同,再記錄下public class DownloadTask { /** * @param path下載地址 * @param filePath儲存路徑 * @param progressDialog進度條 * @return * @t

大資料電話日誌分析callLog案例

一、前端實現 -- 按照時間段查詢通話記錄 ----------------------------------------- 1.完善calllog的dao類calllog.class ----------------------------------------------

解析網頁自定義字型

解析網頁自定義字型(二) 介紹 背景知識 TrueType字型 fontTools 字型檔案解析庫 xml.dom.minidom xml程式碼解析庫 matplotlib 繪圖工具包 pytesseract oc

動態記憶體分配實用案例複製字串

用動態分配記憶體製作一個字串的一份拷貝。注意:呼叫程式應該負責檢查這塊記憶體是否分配成功,這樣做允許程式以任何它所希望的方式對錯誤作出反應。 #nclude <stdlib.h> #include <string.h> char * strdup

爬蟲解析xls檔案處理附錄甘肅省爬蟲解析程式碼

用jxl檔案處理xls表格。突然發現if迴圈真的是感受到了溫暖 package test; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOE

解析DTS到建立device_DTS的匹配和解析結合原始碼

kernel啟動流程_DTS解析(原始碼層面) 此篇部落格有很多參考其他文章的內容,由於參考內容繁雜,不一一標註角標了,在末尾會貼上所有參考部落格的link,如有侵權,請聯絡本人處理,謝謝。 深入,並且廣泛 -沉默犀牛 我認為作為初學者去學習kernel程式碼的一個

C# HTML解析工具HtmlAgilityPack使用例項--Web頁面

一、使用XPath精確解析指定的Dom節點 XPath字串的簡單獲取方法,是在瀏覽器開發者工具中指定節點右鍵》“Copy XPath” 如圖 //載入Web 的頁面並解析內容 string rowP

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

2.2. Jetty配置方式 除了Jetty配置及部署(一)介紹的命令列引數、ini和XML(Jetty IoC)檔案的預設配置方式外,Jetty也為我們提供了其它靈活的配置方案。 由於Jetty的伺服器物件(如Server、連結器、Context等)都

Vue 原始碼解析 - 例項化 Vue 前

前言 上一篇文章,大概的講解了Vue例項化前的一些配置,如果沒有看到上一篇,通道在這裡:Vue 原始碼解析 - 例項化 Vue 前(一) 在上一篇的結尾,我說這一篇後著重講一下 defineReactive 這個方法,這個方法,其實就是大家可以在外面看見一些文章對 vue 實現資料雙向繫結原理的過程。

dubbo原始碼淺析-標籤解析

前面瞭解了dubbo的外掛化機制之後,接下來進入正題,研究一下dubbo的核心原理,由於dubbo的功能配置較多,為了更高效的研讀程式碼,在閱讀的過程中儘量忽略一些細節,重點關注它的主幹流程,主幹瞭解清楚之後再去分析它的一些細節功能就更輕鬆了,否則容易陷入各種細

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

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

爬蟲系列——網頁解析Jsoup

     Jsoup是一款Java的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。  

通俗地說決策樹演算法例項解析

前情提要: 通俗地說決策樹演算法(一)基礎概念介紹 一. 概述 上一節,我們介紹了決策樹的一些基本概念,包括樹的基本知識以及資訊熵的相關內容,那麼這次,我們就通過一個例子,來具體展示決策樹的工作原理,以及資訊熵在其中承擔的角色。 有一點得先說一下,決策樹在優化過程中,有3個經典的演算法,分別是ID3,C4.5

Flask框架—— 反向解析、配置資訊、路由系統、模板、請求響應、閃現、session

Flask框架(二)—— 反向解析、配置資訊、路由系統、模板、請求響應、閃現、session 目錄 反向解析、配置資訊、路由系統、模板、請求響應、閃現、session 一、反向解析 1、什麼是反向解析 2、使用 二、配置資訊 1