对于DefaultHandler类中方法的成员
String uri, String localName, String qName,Attributes attributes 弄的不是很清楚,于是得到下面这片文章感觉讲的蛮清楚的。无节操的贴过来了。
http://blog.csdn.net/wssiqi/article/details/8239357
<?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'。
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
联系客服