localname和qname有什么区别?

时间:2011-08-23 07:03:41

标签: java xml sax

使用SAX解析Java中的XML文件时,startElement(String uri, String localName,String qName, Attributes attributes)等SAX方法中的 localname qname 参数之间有什么区别?< / p>

3 个答案:

答案 0 :(得分:44)

限定名称包括名称空间前缀和本地名称: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"

答案 1 :(得分:13)

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

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

答案 2 :(得分:0)

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

考虑以下示例:

  <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