localname和qname有什么区别?

Bob*_*Bob 28 java xml sax

当使用SAX解析Java中的XML文件时,SAX方法中参数localnameqname之间的区别是startElement(String uri, String localName,String qName, Attributes attributes)什么?

bdo*_*han 44

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

示例XML

<root 
    xmlns="http://www.example.com/DEFAULT" 
    att1="Hello" 
    xmlns:foo="http://www.example.com/FOO" 
    foo:att2="World"/>
Run Code Online (Sandbox Code Playgroud)

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 ""
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)


Era*_*man 13

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

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


Nag*_*Rao 0

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

考虑以下示例:

  <html:hr xmlns:html="http://www.w3.org/1999/xhtml"/>
Run Code Online (Sandbox Code Playgroud)

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

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