localname和qname有什么区别?
当使用SAX解析Java中的XML文件时,SAX方法中的参数localname和qname之间的区别是什么,例如startElement(String uri, String localName,String qName, Attributes attributes)
?
限定名称包括名称空间前缀和本地名称foo:att2
和foo:att2
。
示例XML
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"
一般来说,localname是本地名称,意思是命名空间内部。 qname或限定名称是全名(包括名称空间)。 例如,将具有本地名称b,但是具有qname a:b。
然而,这是非常通用的,并且取决于设置。 请查看本页末尾的示例,以获取更完整的示例: 示例
默认情况下,XML阅读器将在开始和结束处理程序中为名称空间中的每个元素报告名称空间URI和localName。
请考虑以下示例:
使用默认的SAX2命名空间处理,XML阅读器将使用命名空间URI http://www.w3.org/1999/xhtml和localName hr报告开始和结束元素事件。 大多数XMLReader实现还报告原始qName html:hr,但该参数可能只是一个空字符串(除了不在命名空间中的元素)。