本地名和 qname 有什么区别?

2022-09-01 10:34:33

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


答案 1

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

答案 2

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

但是,这是非常通用的,并且与设置相关。请看一下本页末尾的示例,以获取更全面的示例:示例


推荐