對於DefaultHandler類中方法的成員
String uri, String localName, String qName,Attributes attributes 弄的不是很清楚,於是得到下面這片文章感覺講的蠻清楚的。無節操的貼過來了。
http://blog.csdn.net/wssiqi/article/details/8239357
1. xml中的localName和QName
<?xml version="1.0" encoding="utf-8"?> <websites xmlns:sina="http://www.sina.com" xmlns:baidu="http://www.baidu.com"> <sina:website sina:blog="blog.sina.com">新浪</sina:website> <baidu:website baidu:blog="hi.baidu.com">百度</baidu:website> </websites>
Namespace(空間名稱,命名空間)
引入的原因是為了避免混淆。例如上面的這個XML文檔,sina和baidu都有blog屬性,定義了兩個namespace,就像sax官網說的,用namespace是為了實現更多的擴充功能,作為基本應用,很多時候都用不到它:
sina的namespace: http://www.sina.com
baidu的namespace:http://www.baidu.com
xmlns:sina="http://www.sina.com" xmlns:baidu="http://www.baidu.com"
namespace的值可以任意,但是注意不要重複。一般預設的格式都是以url來作為namespace,比如
xmlns:android="http://schemas.android.com/apk/res/android。
Prefix(首碼)
sina:blog中 sina就是首碼。
LocalName(本地名稱)
sina:blog 中blog就是localName。
QName(Qualified Name 限定?指定?名稱)
sina:blog就是QName,相當於首碼+":"+LocalName。
uri(不是url哈)
例如sina:blog的uri就是首碼sina的namespace,即"http://www.sina.com"。
2.sax解析localName與qName
sax simple API for XML,現在有兩個版本,sax和sax2。
sax不支援LocalName、QName和uri。對於屬性sina:blog="blog.sina.com",sax解析的結果是LocalName=QName="sina:blog",uri="",value="blog.sina.com"。
sax2支援LocalName、QName、uri。對於屬性sina:blog="blog.sina.com",sax2解析的結果是 LocalName="blog",QName="sina:blog",uri="",value="blog.sina.com"。
測試:
package com.siqi.xml; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * 要用sax解析,需要實現一個ParseHandler * @author siqi * */ public class SaxParseHandler extends DefaultHandler{ /** * 重寫了DefaultHandler中的startElement函數,每解析到 * 一個元素(element)的時候都會觸發這個函數,並且將這個element * 的屬性attributes和值value當作參數傳進來。除了startElement, * 還有startDocument,endDOucment,endElement,要根據需要 * 重寫這些函數。 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //列印element的基本資料,qName System.out.println("Element qName : "+qName); System.out.println("Element localName: "+localName); System.out.println("Element uri : "+uri); //列印element的所有屬性attributes for(int i=0; i<attributes.getLength(); i++) { System.out.println(""); System.out.println(" attribute qName : "+attributes.getQName(i)); System.out.println(" attribute localName: "+attributes.getLocalName(i)); System.out.println(" attribute value : "+attributes.getValue(i)); System.out.println(" attribute uri : "+attributes.getURI(i)); } System.out.println(""); super.startElement(uri, localName, qName, attributes); } }
parse xml file use sax2 Element qName : websites Element localName: websites Element uri : Element qName : sina:website Element localName: website Element uri : http://www.sina.com attribute qName : sina:blog attribute localName: blog attribute value : blog.sina.com attribute uri : http://www.sina.com Element qName : baidu:website Element localName: website Element uri : http://www.baidu.com attribute qName : baidu:blog attribute localName: blog attribute value : hi.baidu.com attribute uri : http://www.baidu.com