SAX中的localName与qName

时间:2015-02-06 03:01:15

标签: xml xml-parsing sax

使用SAX解析Java中的XML文件时,SAX方法中的参数localNameqName之间有什么区别,例如

startElement(String uri, String localName, String qName, Attributes attributes)

有时我可以从localName获得一个值,但现在我什么也得不到。 一个SAXParserFactory的修订版是884950;其他的是1.5。我根本不使用命名空间。这有关系吗?

1 个答案:

答案 0 :(得分:3)

是的,您是否使用名称空间非常重要,具体而言,SAX如何配置使用它们......

XML名称术语

qName是完整的qualified name,包括namespace prefix(如果有)和localName

所以,对于abc:xyz

  • 名称空间前缀abc
  • localName xyz
  • qName abc:xyz

SAX配置

配置命名空间处理有两个关键功能:

  1. http://xml.org/sax/features/namespaces名称空间
  2. http://xml.org/sax/features/namespace-prefixes namespace-prefixes
  3. 他们的设置会影响通过 uri localName qName 报告给startElement的值,

    public void startElement (String uri, String localName,
                              String qName, Attributes atts)
      throws SAXException;
    

    可能与您的期望不同的组合。请考虑以下examples

      

    配置示例

         

    请考虑以下简单示例文档:

    <?xml version="1.0"?>
    <h:hello xmlns:h="http://www.greeting.com/ns/"
             id="a1" h:person="David"/>
    
         

    如果名称空间为true且名称空间前缀为false(   默认情况下,然后SAX2 XML阅读器将报告以下内容:

         
        
    • 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;的元素和localName&#34;你好&#34 ;;
    •   
    • 没有名称空间URI(空字符串)和qName(通常是localName)&#34; id&#34 ;;和
    •   
    • 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;的属性和localName&#34; person&#34;。
    •   
         

    如果名称空间为true且名称空间前缀为true,则为SAX2   XML阅读器将报告以下内容:

         
        
    • 具有命名空间URI&#34; http://www.greeting.com/ns/&#34;,localName&#34; hello&#34;和qName&#34; h:hello&#34 ;;   
    • 没有名称空间URI(空字符串),没有localName(空字符串)和qName&#34; xmlns:h&#34;;
    • 的属性   
    • 没有名称空间URI的属性(空字符串),qName(通常是localName)&#34; id&#34 ;;和
    •   
    • 属性名称空间URI&#34; http://www.greeting.com/ns/&#34;,localName&#34; person&#34;和qName&#34; h:person&#34;。
    •   
         

    如果名称空间为false且名称空间前缀为true,则为SAX2   XML阅读器将报告以下内容:

         
        
    • 具有qName&#34; h:hello&#34;;
    • 的元素   
    • 具有qName&#34; xmlns:h&#34 ;;
    • 的属性   
    • 具有qName&#34; id&#34;的属性;和
    •   
    • qName&#34; h:person&#34;。
    • 的属性   
         

    请注意,当SAX2报告名称空间声明属性时,例如   &#34; xmlns:h&#34;,它符合XML中的命名空间建议   W3C:它们不在任何名称空间中。其他一些W3C规范   违反该规范,并将此类声明放入   http://www.w3.org/2000/xmlns/命名空间。如果您正在与之合作   命名空间声明,您可能需要了解该问题。