Java Xml 简明教程
Java XML Overview
Java XML 只是通过 Java 程序处理 XML 文档。想象一下,我们有一个文件“products.xml”,其中包含产品详细信息,如名称、品牌和价格。
现在,我们希望使用 Java 编程为某些产品更新价格。在编写此类 Java 程序以访问 XML 文档之前,我们应该了解 XML 基础知识。
What is XML?
XML 是 E*X*tensible *M*arkup *L*anguage 的缩写。它是一种基于文本的标记语言,它用于存储和传输数据。它是自描述的,既可以让人阅读,也可以机器识别。以下是 XML 的一些重要要点 −
-
XML 是一种标记语言。
-
XML 是一种基于标记的语言,如 HTML。
-
XML 标记不是预定义的,如 HTML。
-
您可定义自己的标记,这就是为什么它被称为可扩展语言。
-
XML 标记被设计为自描述的。
-
XML 是 W3C 对数据存储和数据传输的建议。
XML Document
XML 文档是按结构化有条理的方式定义数据的元素集合。XML 文档有两节,分别是 document prolog 和 document elements 。
Elements in XML
元素是 XML 文档的构建基块。它由开放标记、内容和关闭标记组成。在 xml 文档中,应该始终有一个根元素,我们可以在其中编写多个子元素。元素也可能包含任意数量的属性。
Attributes in XML
XML 中的元素可以具有属性。属性是 name-value 对,它们提供了有关特定元素的进一步具体信息。一个元素可以具有任意数量的属性。
Syntax
下面是 XML 特性的语法 −
<element_name attribute_name="value" >content</element_name>
其中,
-
element_name 是元素的名称。
-
attribute_name 是特性的名称。
-
value 是对应特性的值。
Example
现在,我们看一看以下例子,其中“Student”元素有四个特性,即 name、class、marks 和 DOB。
<Student name="Kiran" class="8" marks="50" DOB="27-03-2000"></Student>
Using sub elements to replace attributes
除了特性,也可以在元素中使用子元素,以实现与特性相同的功能。相同的 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 Declaration
XML 声明描述了有关整个 XML 文档的基本格式信息,如版本、编码和独立状态。如果文档中包含 XML 声明,则必须将其写在第一行。
XML Comments
XML 中的注释用于解释文档的用途和详细信息。始终建议在文档中包含注释,因为它使从未阅读过该文档的人更容易理解该文档。XML 遵循与 HTML 相同的语法。
Example
假设我们在 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 Namespaces
XML 命名空间用于解决 XML 文档中的命名冲突。当添加两个或多个 XML 片段时,则这些 XML 代码片段可能会使用一些具有相同名称的标记。这会让 XML 解析器感到困惑。为了避免此类命名冲突,请使用 XML 名称空间。
Example
假设我们创建了一个 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 中解决这些名称冲突。它们是:
-
Using Prefix
-
Using namespace declaration
Using Prefix
我们可以通过向元素添加前缀使之彼此区分。为了解决上述名称冲突,我们可以向保存咖啡桌信息的元素添加前缀“c”,类似地,我们可以向另一个元素(餐桌)添加前缀“d”。
Example
让我们采用相同的表格示例,并尝试使用前缀解决名称冲突。
<!-- 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>
Drawbacks of Using Prefixes
在使用前缀时,仍有可能出现两个元素具有与名称相同的前缀的情况。在这种情况下,冲突依然存在。
假设假如我们添加另一个元素来提供有关梳妆台的信息,则为了区分这些元素,我们需要使用前缀“d”。这再次导致餐桌和梳妆台之间出现冲突。因此,使用前缀可以在某种程度上解决冲突,但做不到彻底解决。
Using "namespace" Declaration
XML 命名空间声明用于有效解决名称冲突。使用名为“xmlns”的新属性。
Syntax
以下是 XML 命名空间的语法:
<element-name xmlns:prefix="URI">
其中,
-
element-name :使用命名空间的元素名称。
-
xmlns :声明命名空间的强制性关键字。
-
prefix: Namespace prefix
-
URI: Namespace identifier
Example
以下示例对三个表格标记使用了 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>