Java SAXParser:`localName`和`qName`之间的区别

hqt*_*hqt 11 java xml sax terminology

在Java中, Handler类包含名称为startElement.this方法具有原型的方法:

public void startElement(String uri, String localName, String qName, Attributes attributes)

我在Oracle Java网站上看过,但我还是不明白它localNameqName参数之间的区别.他们解释说:

localName - 本地名称(不带前缀),如果未执行名称空间处理,则为空字符串.qName - 限定的XML 1.0名称(带前缀),如果限定名称不可用,则为空字符串.

在上面的定义中,我不知道一些概念:( prefix前缀是什么?)Namespace

请给我一些关于这些参数的解释(尽可能简单).

谢谢 :)

Rya*_*ord 29

作为示例,我将引用以下XML示例:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string"/>
        <xs:element name="from" type="xs:string"/>
        <xs:element name="heading" type="xs:string"/>
        <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

命名空间

命名空间是定义元素的逻辑容器.XML Schema名称空间(使用uri:http://www.w3.org/2001/XMLSchema).在上面的文档中,它在第2行引用.XML文档处理可以使用XML解析器进行,该XML解析器可以是名称空间感知的,但是使用名称空间的文档通常需要由名称空间感知的解析器来解析.

定义命名空间,以便a)它们可以由解析器和b)编目,以便不同命名空间中具有相同名称的元素可以存在于同一文档中,而不会被模糊定义.

字首

前缀是用于引用命名空间的简写键.在上面的示例中,xs用于引用XML Schema名称空间.

本地名称(部分)

文档中的元素具有在命名空间中定义的名称.在上面的例子中,你可以找到schema,element,complexType,sequence,和element当地的名字.如果文档中引用了多个名称空间,并且其中一个或多个名称空间定义了具有相同名称的元素,则本地名称可能不明确.

限定名称(qName)

限定名称由命名空间的前缀组成(可选地,某些实现可以使用命名空间uri),后跟a :,后跟元素的本地名称.在上面的例子中,你可以找到xs:schema,xs:element,xs:complexType,xs:sequence,并xs:element为合格的名字.这些名称是明确的,可以由解析器处理并验证.

  • 是的,这就是为什么剪切和粘贴开发很糟糕的原因.:d (3认同)
  • 哦.谢谢:)你的例子是如此简单和理解!在你的例子和解释之后,我读了另一篇关于这个并且比以往任何时候都理解的文 (3认同)
  • 这里也是关于这个话题的问题.你能帮我解释一下:) http://stackoverflow.com/questions/9441593/xml-sax-explain-result-in-qname-and-localname-in-one-example-xml-file (2认同)