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

时间:2016-10-07 10:43:15

标签: java xml dom w3c

我有一个编程逻辑,我必须通过一个函数创建两个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的重要性是什么?

3 个答案:

答案 0 :(得分:3)

TL; DR - XML文档是故意设计为其自身元素的工厂,因为它是一种特殊类型的Node:它还指向了一个关于人们期望的内容的约定文件的结构。

  

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

区分XML文档和浮动的元素。从文档制作元素工厂"是XML Document Object Model的规范从一开始就有意做出的设计决策,以及嵌入其core

的决定

这种设计选择的原因是,你问的是什么?嗯,XML / HTML是关于结构化数据,使用标签将结构划分为线性文本文档。这种结构旨在使文本信息处理更容易和交换(不会失去人眼的可读性)。

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

此约定由(旧式)DTD(即“文档类型定义 - 适用于SGML”)或XSD(即XML)制定。架构定义)。当我发送给另一方和XML 文档时,XML规范说我必须发送一些指向DTD或XSD之一的信息,因此接收方将知道我和#39;采用文件结构。

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

(噢)

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

这是一个旧的API,可以追溯到那些在使用Java思考抽象出这些接口等详细信息的组中非常常见的时候“以防万一你希望切换实现。”它现在听起来很疯狂,因为为什么在地球上你会在内置的XML API和实现相同接口的第三方之间切换XML实现。然而,这就是许多开发人员在90年代末和00年代早期看到这样的事情的方式。