• 【转】xml sax localName和qName的区别


    今学了一下关于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  

    搬运完毕。感谢原作者。

  • 相关阅读:
    【SICP练习】129 练习3.60
    【SICP练习】128 练习3.59
    【SICP练习】127 练习3.58
    【SICP练习】126 练习3.57
    【SICP练习】125 练习3.56
    【SICP练习】124 练习3.55
    【SICP练习】123 练习3.54
    【SICP练习】122 练习3.53
    【SICP练习】121 练习3.52
    【SICP练习】120 练习3.51
  • 原文地址:https://www.cnblogs.com/cyttina/p/2999321.html
Copyright © 2020-2023  润新知