Java SAXParser:“localName”和“qName”之间的区别

发布于 2025-01-08 11:57:08 字数 547 浏览 0 评论 0原文

在Java中,Handler类包含名为startElement的方法。该方法的原型为:

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

我已经在Oracle Java网站上阅读过,但我仍然不明白localNameqName参数之间有什么区别。这里他们解释一下:

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

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

谁可以为我解释一下(尽可能简单)这些参数, 请。

谢谢 :)

In Java, Handler class contains method which name is startElement.this method has prototype:

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

I have read on Oracle Java website, but I still not understand what different between localName and qName parameter.Here they explain:

localName - The local name (without prefix), or the empty string if
Namespace processing is not being performed.
qName - The qualified XML 1.0 name (with prefix), or the empty string if qualified names are not available.

In above definition, I don't know some concepts: prefix (prefix of what ?) Namespace

Who can explain for me (as most simple as you can) about these parameter, please.

thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

回忆躺在深渊里 2025-01-15 11:57:08

作为示例,我将参考以下 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>

命名空间

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

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

前缀

前缀是用于引用命名空间的简写键。在上面的示例中,xs 用于引用 XML 架构命名空间。

本地名称(部分)

文档中的元素具有名称空间中定义的名称。在上面的示例中,您可以找到 schemaelementcomplexTypesequenceelement< /code> 作为本地名称。如果文档中引用了多个命名空间,并且这些命名空间中的一个或多个定义了具有相同名称的元素,则本地名称可能不明确。

限定名称 (qName)

限定名称由命名空间的前缀(某些实现可以选择使用命名空间 uri)、后跟 : 和元素的本地名称组成。在上面的示例中,您可以找到 xs:schemaxs:elementxs:complexTypexs:sequence > 和 xs:element 作为限定名称。这些名称是明确的,并且可以由解析器处理和验证。

As an example, I'm going to refer to the following XML sample:

<?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>

Namespace

A namespace is the logical container in which an element is defined. The XML Schema namespace (with uri: http://www.w3.org/2001/XMLSchema). In the above document, it is being referenced on line 2. XML document processing may occur using an XML parser which is either namespace-aware or not, but documents using namespaces will typically need to be parsed by namespace-aware parsers.

Namespaces are defined so that a) they can be cataloged by the parser and b) so that elements with the same name in different namespaces can exist in the same document without becoming ambiguously-defined.

Prefix

A prefix is the short-hand key used to refer to a namespace. In the above example, xs is used to refer to the XML Schema namespace.

Local Name (Part)

An element in a document has a name as it is defined in the namespace. In the above example, you can find schema, element, complexType, sequence, and element as local names. Local names can be ambiguous if you have multiple namespaces referenced in your document and one or more of those namespaces define elements with the same name.

Qualified Name (qName)

A qualified name consists of the prefix for the namespace (optionally, some implementations can use the namespace uri), followed by a :, followed by the element's local name. In the above example, you can find xs:schema, xs:element, xs:complexType, xs:sequence, and xs:element as qualified names. These names are unambiguous, and can be processed by the parser and validated.

皓月长歌 2025-01-15 11:57:08

QNamesQ限定名称)是由 XML 命名空间引入的,以便用作 URI 引用。 QName 定义元素和属性的有效标识符。 QName 通常用于引用 XML 文档中的特定元素或属性,并提供一种简洁地标识 {URI, local-name} 对的机制。命名空间也可以在 XML 根元素中声明

示例:

<?xml version='1.0'?>
  <doc xmlns:x="http://example.com/ns/foo">
    <x:p/>
  </doc>  

QName x:p{URI, local-name}< 的简洁、明确的名称/code> 对 {"http://example.com/ns/foo", "p"}. 其中 doc 是本地名称。

Java 类比:

com.prem.java.Employee employee; //creating object using fully qualified name i.e. QName
Student student; //create an object using local name

QNames (Qualified Name) were introduced by XML Namespaces in order to be used as URI references. QName defines a valid identifier for elements and attributes. QNames are generally used to reference particular elements or attributes within XML documents and provide a mechanism for concisely identifying a {URI, local-name} pair. Namespaces can also be declared in the XML root element

Example:

<?xml version='1.0'?>
  <doc xmlns:x="http://example.com/ns/foo">
    <x:p/>
  </doc>  

The QName x:p is a concise, unambiguous name for the {URI, local-name} pair {"http://example.com/ns/foo", "p"}. Where doc is local name.

Java Analogy:

com.prem.java.Employee employee; //creating object using fully qualified name i.e. QName
Student student; //create an object using local name
梦里的微风 2025-01-15 11:57:08

瑞安的回答非常好。您需要的唯一其他信息是 SAX 中的 startElement 事件所报告内容的确切详细信息取决于 SAX 解析器的各种配置设置。遗憾的是,我没有时间详细介绍 Ryan 所做的细致工作。

Ryan's answer is excellent. The only other piece of information you need is that the exact details of what gets reported on the startElement event in SAX depend on various configuration settings of the SAX parser. Sadly, I don't have time to give the meticulous detail that Ryan has done.

可是我不能没有你 2025-01-15 11:57:08

在sax解析器中,有本地名称,qname和命名空间,

qname是标签的名称以及命名空间,而本地名称只是标签名称。本地名称可能不明确,但 qname 永远不会。

In sax parser there are local name ,qname and namespace

qname is name of tag along with namespace while local name is only tag name. local name may be ambiguous but qname never.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文