欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

xml sax localname跟qname的区别

更新时间: 2014-01-05 02:02:23 责任编辑: Author_N1

 

xml sax localName和qName的区别

对于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

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


上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:02:23
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/4877/
本文WWW.DOC100.NET DOC100.NET版权所有。