今学了一下关于java使用sax解析xml的东西。关于sax,百度给出的解释就很爽。这里贴出连接
http://baike.baidu.com/view/696824.htm
于是乎,关于写了几个小程序找了找解析xml的感觉。对于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); } }
执行结果:(这里只贴出sax2的结果)
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
搬运完毕。感谢原作者。