繁体   English   中英

为什么我们需要文档实例才能在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);

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

TL; DR -XML文档被设计为针对其自身元素的工厂,因为它是Node的一种特殊类型:它还指出了有关文档结构的期望的约定。

文档创建元素的意义是什么?

区分XML文档和只是一个浮动元素。 从文档开始,“元素工厂”是XML文档对象模型从一开始就有针对性地做出的设计决定,并且是嵌入其核心的决定。

选择这种设计的原因是您要问什么? 好吧,XML / HTML与结构化数据有关,它使用标签将结构定界为线性文本文档。 此结构旨在简化文本信息的处理和交换 (不会丢失人眼的可读性)。

现在, 信息交换在这里很重要:由于XML(及其祖先SGML )允许定义自己的结构,因此在交换XML文档之前,需要在交换双方之间建立一个约定将是该结构以及该结构将在标记文本上施加的语义(语义示例:例如<h1><h2>等是标头, <em>将表示文本被强调,并且<table>将包含2D表格数据,而不是线性文本流等)。

该约定由(旧样式) DTD (即文档类型定义-也适用于SGML)或XSD (即XML Schema Definition)制定。 当我发送给另一方和XML 文档时 ,XML规范说我必须发送一些指向DTD或XSD的信息,以便接收方知道我对文档的结构采用了什么约定。 。

因此,Document节点将只包含一个元素(根元素),它能够创建其他Element节点(作为工厂),但是程序员有责任将创建的节点插入适当的位置 ,以便结果文件将在约定的结构下有效。 如果查看DOM-nodeDocument类型的规范,您会注意到它具有和名为doctype属性:该属性旨在包含有关文档结构约定的额外信息(实际上,此doctype将包含指向包含文档结构描述的DTD或XSD)


(w)

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

但是,更有可能的是org.w3c.Document是一个非常古老的外部非java. ... java. ... API,可以从许多功能,儿童,儿童人数,所需的演员表等中看到。 可能已经考虑过这样的创建验证(快速失败) ,但是我个人认为Document是定义为标准的接口,并指定了最官僚的要求:构造过程通过文档进行。

DocumentElementorg.w3c.* API中的接口。 因此,没有办法直接直接实例化它们。 Java运行时提供了一个默认的Java实现,但是可能还有其他实现接口的实现。 之所以存在createElement逻辑,也部分是因为在首次创建此API时,使用工厂实例化对象的情况要普遍得多。

它是一个古老的API,可以追溯到在使用Java的团队中普遍考虑抽象出诸如这些接口之类的细节的年代,以防万一您想切换实现。 现在听起来很疯狂,因为为什么在地球上您会在内置XML API和实现相同接口的第三方之间切换XML实现。 但这就是许多开发人员在90年代末和00年代初看到的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM