为什么我们需要文档实例来在 java 中创建一个 xml 元素?

Why do we need document instance to create an xml Element in java?

我有一个编程逻辑,我必须通过一个函数创建两个 XML。

我在网上看到的每个教程都遵循特定的步骤来创建 XML。我编写了以下代码以在 Java 中创建 XML:

DocumentBuilderFactory documentBuilderFactory =DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder =documentBuilderFactory.newDocumentBuilder();
Document xmlDocument= documentBuilder.newDocument();
Document anotherXmlDocument= documentBuilder.newDocument();
Element rootElement = xmlDocument.createElement("root");
Element anotherRootElement = anotherXmlDocument.createElement("root");// reduntant line
xmlDocument.appendChild(rootElement);
anotherXmlDocument.appendChild(anotherRootElement);

第6行不是多余的吗?创建文档有什么意义Element?

在 XML 树中有命名空间定义,并且可能附加了 DTD 或架构,描述了哪些元素是允许的。当 xml 版本高于 1.0.

时,标记名称可以是 Unicode 字母

但更可能的是 org.w3c.Document 是一个非常古老的外部非 java. ... API,从许多特征中可以看出,children, children 计数,需要施法等等。这种对创建的验证可能被认为是 (fail-fast),但我个人认为 Document 是一个定义为标准的接口,并指定了最官僚的要求:构造通过文档。

DocumentElementorg.w3c.* API 中的接口。所以实际上没有办法直接实例化它们。 Java 运行时附带了一个默认的 Java 实现,但可能还有其他实现接口的实现。 createElement 逻辑之所以存在,部分原因还在于在 API 首次创建时使用工厂实例化对象更为普遍。

这是一个古老的 API,可以追溯到使用 Java 来考虑抽象出这些接口等细节的群体中非常普遍的时代 "just in case you want to switch implementations." 现在听起来很疯狂,因为到底为什么要在内置 XML API 和实现相同接口的第三方之间切换 XML 实现。然而,在 90 年代末和 00 年代初,许多开发人员就是这样看待这些事情的。

TL;DR - XML 文档被特意设计为其自身元素的工厂,因为它是一种特殊类型的节点:它也指向约定关于人们应该从文档的结构中得到什么。

What is the significance of document to create an Element?

区分 XML 文档和浮动元素。根据文档制作 "factory of elements" 是根据 XML Document Object Model since the very beginning and a decision that is embedded in its core

的规范有意做出的设计决定

选择这种设计的原因,是您要问的吗?好吧,XML/HTML 是关于结构化数据的,使用标签将结构分隔成线性文本文档。这种结构旨在使文本信息处理和交换更容易(同时不失去人眼的可读性)。

现在,信息交换 是重要的一点:因为 XML(及其祖先 - SGML)允许定义自己的结构, 在交换 XML 文档之前需要在交换双方之间建立一个约定,约定结构是什么以及该结构将对 marked-up 文本施加什么语义(语义示例:像 <h1><h2> 等 headers、<em> 将意味着文本被强调,而 <table> 将包含二维表格数据而不是线性流文本等)。

此约定将由(旧样式)DTD (that's Document Type Definition - works for SGML as well) or an XSD(即 XML 架构定义)之一制定。当我向另一方发送 XML 文档 时,XML 规范说我必须发送一些指向 DTD 或 XSD, 这样接收方就会知道我对文档的结构采用了什么约定。

因此,文档节点将仅包含一个元素(根元素),它将能够创建其他元素节点(作为工厂),但程序员有责任插入 在适当的地方创建节点,以便生成的文档对约定的结构有效。如果您查看 Document type of DOM-node 的规范,您会注意到它具有名为 doctype 的属性:此属性旨在包含有关文档结构约定的额外信息(实际上,这个 doctype 将指向包含文档结构描述的 DTD 或 XSD)


(呼)