Java localname和qname之间有什么区别?

Java localname和qname之间有什么区别?,java,xml,sax,Java,Xml,Sax,使用SAX解析Java中的XML文件时,SAX方法中的参数localname和qname之间有什么区别,例如startElement(字符串uri、字符串localname、字符串qname、属性)?默认情况下,XML读取器将在开始和结束处理程序中报告属于命名空间的每个元素的命名空间URI和localName 考虑以下示例: <html:hr xmlns:html="http://www.w3.org/1999/xhtml"/> 使用默认的SAX2名称空间处理,XML读取器

使用SAX解析Java中的XML文件时,SAX方法中的参数localnameqname之间有什么区别,例如
startElement(字符串uri、字符串localname、字符串qname、属性)

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

考虑以下示例:

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

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


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

限定名称包括名称空间前缀和本地名称:
att1
foo:att2

示例XML

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


问题:qName是前缀+':'+本地名,还是“{'+名称空间URI+'}'+本地名?像这样:
{http://www.w3.org/1999/xhtml}人力资源
。因为前缀将元素绑定到名称空间,但其实际字符串应该不重要。Qualified=名称空间和本地名称。它将是
前缀+:“+localname
。(但是您可以通过查看Javadoc或解析器的输出来发现这一点-为什么要在这里问?)
int att1Index = attributes.getIndex("", "att1");
attributes.getLocalName(att1Index);  // returns "att1"
attributes.getQName(att1Index);  // returns "att1"
attributes.getURI(att1Index);  // returns ""
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"