【问题标题】:What is the difference between localname and qname?localname 和 qname 有什么区别?
【发布时间】:2011-11-01 17:01:58
【问题描述】:

在Java中使用SAX解析XML文件时,startElement(String uri, String localName,String qName, Attributes attributes)等SAX方法中参数localnameqname有什么区别?

【问题讨论】:

    标签: java xml sax


    【解决方案1】:

    默认情况下,XML 阅读器将在开始和结束处理程序中报告属于命名空间的每个元素的命名空间 URI 和本地名称。

    考虑以下示例:

      <html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
    

    使用默认的 SAX2 命名空间处理,XML 阅读器将使用命名空间 URI http://www.w3.org/1999/xhtml 和 localName hr 报告开始和结束元素事件。大多数 XMLReader 实现还报告原始 qName html:hr,但该参数可能只是一个空字符串(不在命名空间中的元素除外)。

    http://www.saxproject.org/namespaces.html

    【讨论】:

    • 问题:qName 是前缀 + ':' + 本地名称,还是 '{' + 命名空间 URI + '}' + 本地名称?像这样:{http://www.w3.org/1999/xhtml}hr。因为前缀将元素绑定到命名空间,但它的实际字符串应该无关紧要。 Qualified = 命名空间和本地名称。
    • 它将是prefix+":"+localname。 (但您可以通过查看 Javadoc 或解析器的输出来发现这一点——您为什么要在这里问?)
    【解决方案2】:

    一般来说,localname 是本地名称,意思是在命名空间内。 qname 或限定名是全名(包括命名空间)。例如, 将有一个本地名称 b,但有一个 qname a:b。

    然而,这是非常通用的,并且取决于设置。查看本页末尾的示例以获得更详尽的示例:example

    【讨论】:

      【解决方案3】:

      限定名称包括命名空间前缀和本地名称:att1foo:att2

      示例 XML

      <root 
          xmlns="http://www.example.com/DEFAULT" 
          att1="Hello" 
          xmlns:foo="http://www.example.com/FOO" 
          foo:att2="World"/>
      

      Java 代码:

      att1

      没有命名空间前缀的属性不会选择默认命名空间。这意味着root 元素的命名空间是"http://www.example.com/DEFAULT"att1 属性的命名空间是""

      int att1Index = attributes.getIndex("", "att1");
      attributes.getLocalName(att1Index);  // returns "att1"
      attributes.getQName(att1Index);  // returns "att1"
      attributes.getURI(att1Index);  // returns ""
      

      att2

      int att2Index = attributes.getIndex("http://www.example.com/FOO", "att2");
      attributes.getLocalName(att2Index);  // returns "att2"
      attributes.getQName(att2Index);  // returns "foo:att2"
      attributes.getURI(att2Index);  // returns "http://www.example.com/FOO"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-15
        • 2012-01-15
        • 2015-04-06
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        相关资源
        最近更新 更多