Java XML 概述



Java XML 只是从 Java 程序中处理 XML 文档。想象一下,我们有一个文件“products.xml”,其中包含产品详细信息,例如名称、品牌和价格。

现在,我们想使用 Java 编程更新某些产品的价格。在编写此类访问 XML 文档的 Java 程序之前,我们应该了解 XML 的基础知识。

什么是 XML?

XML 代表可扩展标记语言 (**E**xtensible **M**arkup **L**anguage)。它是一种基于文本的标记语言,用于存储和传输数据。它是自描述的,并且既可供人类阅读,也可供机器读取。以下是关于 XML 的一些要点:

  • XML 是一种标记语言。

  • XML 是一种基于标签的语言,类似于 HTML。

  • XML 标签不是预定义的,与 HTML 不同。

  • 您可以定义自己的标签,这就是它被称为可扩展语言的原因。

  • XML 标签旨在自描述。

  • XML 是 W3C 推荐的数据存储和数据传输标准。

XML 文档

XML 文档是元素的集合,以结构良好且组织良好的方式定义数据。XML 文档有两个部分,即**文档序言**和**文档元素**。

语法

以下是 XML 文档的语法:

<?xml ?>
<root_element>
	<element></element>
	...
</root_element>

其中,

  • <?xml ?> 是 XML 声明语句。如果包含,则必须放在第一行。
  • <root_element> 是根元素,它是所有其他元素的父元素。
  • <element> 是根元素的子元素。

示例

以下示例显示了员工详细信息,其中<Employee>作为根元素,<name><role><salary>作为子元素。每个元素的数据都包含在开始和结束标签之间。

<?xml version="1.0" ?>
<Employee>
	<name>Kiran</name>
	<role>developer</role>
	<salary>25,000</salary>
</Employee>

XML 中的元素

元素是 XML 文档的基本构建块。它由开始标签、内容和结束标签组成。在 xml 文档中,应该始终有一个根元素,在其中我们可以编写许多子元素。元素也可以在其中包含任意数量的属性。

语法

以下是 XML 元素的语法:

<root>
	<child>
		<subchild>.....</subchild>
	</child>
</root>

其中,

  • <root> 是 XML 文档的根元素。
  • <child> 是子元素,其父元素是根元素。
  • <subchild> 是子孙元素,其父元素是子元素。

示例

让我们看一个 DOB(出生日期)进一步细分为日期、月份和年份的示例。这里,<DOB>是根元素,<date><month><year>是子元素。

<DOB>
	<date>27</date>
	<month>March</month>
	<year>2000</year>
</DOB>

XML 中的标签

XML 中的标签是自解释的和用户定义的。它们包含在小于 (<) 和大于 (>) 符号中。XML 区分大小写,因此开始和结束标签应具有相同的名称。

示例

在以下示例中,我们编写了一个带有开始和结束标签的地址元素。

<address>Hyderabad</address>

现在,让我们看看一些编写 XML 标签的**不正确**方法

<Address></address>
<ADDRESS></address>
由于 XML 与 HTML 不同,它区分大小写,因此它会抛出错误:**开始和结束标签不匹配**。

XML 中的属性

XML 中的元素可以具有属性。属性是提供有关特定元素的更多特定信息的**名称-值**对。一个元素可以具有任意数量的属性。

语法

以下是 XML 属性的语法:

<element_name attribute_name="value" >content</element_name>	

其中,

  • element_name 是元素的名称。
  • attribute_name 是属性的名称。
  • value 是相应属性的值。

示例

现在,让我们看看以下示例,其中我们为“Student”元素有四个属性,名称、类、分数和 DOB。

<Student name="Kiran" class="8" marks="50" DOB="27-03-2000"></Student>

使用子元素替换属性

除了属性之外,还可以使用子元素在元素中实现与属性相同的功能。相同的学生示例也可以写成如下形式

<Student>
	<name>Kiran</name>
	<class>8</class>
	<marks>50</marks>
	<DOB>27-03-2000</DOB>
</Student>
始终建议使用子元素而不是属性。因为,子元素可以进一步扩展,而属性则不能扩展。

在上面的示例中,如果我们进一步希望出生日期为日期、月份和年份,则可以通过为 DOB 元素使用子元素来实现,如下所示

<Student>
	<name>Kiran</name>
	<class>8</class>
	<marks>50</marks>
	<DOB>
		<date>27</date>
		<month>03</month>
		<year>2000</year>
	</DOB>
</Student>

XML 声明

XML 声明描述了有关整个 XML 文档的基本格式信息,例如版本、编码和独立状态。如果 XML 声明包含在文档中,则必须将其写入第一行。

默认情况下,如果未提及声明,则 XML 解析器会认为文档的版本为 1.0。

语法

以下是 XML 声明的语法:

<?xml
	version="version_number"
	encoding="encoding_type"
	standalone="standalone_status"
?>

其中,

  • XML 声明以字符序列<?xml开头,以字符序列?>结尾。
  • version 是使用的 XML 版本号。
  • encoding 是用于 XML 文档内容的字符编码。
  • standalone 是一个布尔属性,其默认值为“no”。这指示 XML 文档是独立的还是使用来自外部源的信息来解析文档,例如 DTD(文档类型定义)。默认值为“no”。

示例

以下示例使用 XML 1.0 版本,编码类型为 UTF-16,并且它是独立的。

<?xml
	version="1.0"
	encoding="UTF-16"
	standalone="yes"
?>

XML 注释

XML 中的注释用于解释文档的目的和详细信息。始终建议在文档中包含注释,因为它使第一次阅读文档的人员的任务变得更简单。XML 遵循与 HTML 相同的语法。

语法

以下是单行和多行 XML 注释的语法:

<!-- comment here -->

示例

假设我们在 2015 年收集了大学各部门的信息。这些记录可能会随着时间的推移而改变。因此,在注释中提及这一点有助于编辑人员了解这些详细信息是在何时收集的。

<?xml version = "1.0" encoding = "UTF-8" ?>
<!-- Following information is collected in the year 2015 -->
<college>
	<Department>
		<name>CSE</name>
		<code>CS</code>
		<faculty_strength>25</faculty_strength>
	</Department>
	<Department>
		<name>ECE</name>
		<code>EC</code>
		<faculty_strength>20</faculty_strength>
	</Department>
</college>

XML 命名空间

XML 命名空间用于解决 XML 文档中的名称冲突。当添加两个或多个 XML 片段时,这些 XML 代码片段可能会使用一些名称相同的标签。然后,这会使 XML 解析器感到困惑。为了避免此类名称冲突,使用了 XML 命名空间。

示例

假设我们创建了一个 XML 元素,其中包含关于咖啡桌的信息:

<table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

假设我们创建了另一个元素,其中包含关于餐桌的信息:

<table>
	<shape>Rectangle</shape>
	<material>Marble</material>
	<seat_count>6</seat_count>
	<cost>25000</cost>
</table>

当上述两个 XML 代码片段加在一起(在一个文件中)时,就会发生名称冲突。尽管两个元素的名称相同,但它们提供的信息却有所不同。在 XML 中有两种方法可以解决这些名称冲突。它们是:

  • 使用前缀
  • 使用命名空间声明

使用前缀

我们可以通过向元素添加前缀来区分它们。为了解决上述名称冲突,我们可以向包含咖啡桌信息的元素添加前缀“c”,类似地,我们可以为另一个元素(餐桌)添加前缀“d”。

示例

让我们以相同的表格为例,尝试使用前缀解决名称冲突。

<!-- Coffee Table -->
<c:table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

<!-- Dining Table -->
<d:table>
    <d:shape>Rectangle</d:shape>
    <d:material>Marble</d:material>
    <d:seat_count>6</d:seat_count>
    <d:cost>25000</d:cost>
</d:table>

使用前缀的缺点

在使用前缀时,仍然有可能两个元素具有相同的名称和前缀。在这种情况下,冲突仍然存在。

假设如果我们添加另一个元素提供梳妆台的信息,为了区分,我们需要使用前缀“d”。这再次在餐桌和梳妆台之间产生冲突。因此,使用前缀可以在一定程度上解决冲突,但不能完全解决。

使用“命名空间”声明

XML 命名空间声明用于有效地解决名称冲突。使用了一个名为“xmlns”的新属性。

语法

以下是 XML 命名空间的语法:

<element-name xmlns:prefix="URI">

其中,

  • element-name:使用命名空间的元素名称。
  • xmlns:声明命名空间的必填关键字。
  • prefix:命名空间前缀。
  • URI:命名空间标识符。

示例

以下示例为三个表格标签使用了 XML 命名空间声明。现在,餐桌和梳妆台之间的冲突通过在其命名空间 URI 中区分它们来解决。

<!-- Coffee Table -->
<h:table xmlns:h="/coffee">
<c:table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

<!-- Dining Table -->
<d:table xmlns:h="/dining">
    <d:shape>Rectangle</d:shape>
    <d:material>Marble</d:material>
    <d:seat_count>6</d:seat_count>
    <d:cost>25000</d:cost>
</d:table>

<!-- Dressing Table -->
<d:table xmlns:h="/dressing">
    <d:brand>Trevi Furniture</d:brand>
    <d:material>Engineered wood</d:material>
    <d:cost>15000</d:cost>
</d:table>
广告

© . All rights reserved.