Xml 简明教程
XML - Overview
XML 代表 *E*xtensible *M*arkup *L*anguage。它是一种基于文本的标记语言,源自标准通用标记语言 (SGML)。
XML 标签标识数据,用于存储和组织数据,而不是像用于显示数据的 HTML 标签那样指定如何显示数据。XML 在可预见的未来不会取代 HTML,但它通过采用 HTML 的许多成功功能引入了新的可能性。
XML 有三个重要的特性,使其在各种系统和解决方案中很有用:
-
XML is extensible − XML 允许您创建自己的自描述标签或语言,以适合您的应用程序。
-
XML carries the data, does not present it − XML 允许您存储数据,而不管其如何呈现。
-
XML is a public standard − XML 由万维网联盟 (W3C) 开发,并作为开放标准提供。
XML Usage
XML 用途的简短列表说明了一切:
-
XML 可以作为幕后工作者简化大型网站中的 HTML 文档创建。
-
XML 可用于交换组织和系统之间的信息。
-
XML 可用于卸载和重新加载数据库。
-
XML 可用于存储和整理数据,可以自定义数据处理需求。
-
XML 可以轻松与样式表合并,从而创建几乎任何所需的输出。
-
几乎任何类型的数据都可以作为 XML 文档表示。
What is Markup?
XML 是一种标记语言,它为以人类可读和机器可读格式编码文档定义了一组规则。那么什么是标记语言呢?标记是添加到文档中的信息,通过识别各个部分及其相互关系,可以以某种方式增强其含义。更具体地说,标记语言是一组符号,可以放在文档文本中,以划分和标记文档的部分。
以下示例展示了当 XML 标记嵌入在文本片段中时的外观 −
<message>
<text>Hello, world!</text>
</message>
此代码段包括标记符号,或标记,如 <message>…</message> 和 <text>… </text>。标记 <message> 和 </message> 标记 XML 代码片段的开始和结束。标记 <text> 和 </text> 环绕文本 Hello, world!。
XML - Syntax
在本章节中,我们将讨论编写 XML 文档的简单语法规则。以下是一个完整的 XML 文档 −
<?xml version = "1.0"?>
<contact-info>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact-info>
您会注意到以上示例中有两种信息 −
-
Markup, like <contact-info>
-
文本或字符数据,Tutorials Point 和 (040) 123-4567。
下图描述了在 XML 文档以撰写不同类型的标记和文本的语法规则。
让我们详细了解上图的每个组件。
XML Declaration
XML 文档可以选择使用 XML 声明。它的撰写方式如下 −
<?xml version = "1.0" encoding = "UTF-8"?>
其中版本为 XML 版本,编码指定文件中使用的字符编码。
Tags and Elements
XML 文件由多个 XML 元素构成,也称为 XML 节点或 XML 标记。XML 元素的名称用尖括号 < > 括起来,如下所示 −
<element>
Syntax Rules for Tags and Elements
Element Syntax − 每个 XML 元素都需要使用起始元素或结束元素关闭,如下所示 −
<element>....</element>
或在简单的情况下,只需这样 −
<element/>
Nesting of Elements − 一个 XML 元素可以包含多个 XML 元素作为其子元素,但子元素不能重叠。即,元素的结束标记必须和最近未匹配的起始标记同名。
以下示例显示了错误的嵌套标记 −
<?xml version = "1.0"?>
<contact-info>
<company>TutorialsPoint
</contact-info>
</company>
以下示例显示了正确的嵌套标记 −
<?xml version = "1.0"?>
<contact-info>
<company>TutorialsPoint</company>
<contact-info>
Root Element − 一个 XML 文档只能有一个根元素。例如,以下不是正确的 XML 文档,因为 x 和 y 元素都出现在顶层,没有根元素 −
<x>...</x>
<y>...</y>
以下示例显示了格式正确的 XML 文档 −
<root>
<x>...</x>
<y>...</y>
</root>
Case Sensitivity − XML 元素名称区分大小写。这意味着起始元素和结束元素的名称需要完全相同。
例如, <contact-info> 不同于 <Contact-Info>
XML Attributes
attribute 为元素指定单个属性,使用名称/值对。XML 元素可以有一个或多个属性。例如 −
<a href = "http://www.tutorialspoint.com/">Tutorialspoint!</a>
此处 href 是属性名称, http://www.tutorialspoint.com/ 是属性值。
XML References
引用通常允许您在 XML 文档中添加或包含其他文本或标记。引用始终以 "&" 符号(这是一个保留字符)开头,以 ";". 符号结束,XML 有两种类型的引用−
-
Entity References -实体引用在起始和结束分隔符之间包含一个名称。例如, & ,其中 amp 是名称。该名称引用了一段预定义的文本和/或标记。
-
Character References -这些包含引用,如 A ,其中包含一个井号 (“#”) 和一个数字。该数字始终引用字符的 Unicode 编码。在本例中,65 引用字母 “A”。
XML Text
XML 元素和 XML 属性的名称区分大小写,这意味着起始和结束元素的名称需要采用相同的大小写书写。为了避免字符编码问题,所有 XML 文件都应保存为 Unicode UTF-8 或 UTF-16 文件。
XML 元素之间的空白字符(如空格、制表符和换行符)以及 XML 属性之间的空白字符将被忽略。
XML 语法本身保留一些字符。因此,它们不能直接使用。要使用它们,应使用下面列出的替换实体−
Not Allowed Character |
Replacement Entity |
Character Description |
< |
< |
less than |
> |
> |
greater than |
& |
& |
ampersand |
' |
' |
apostrophe |
" |
" |
quotation mark |
XML - Documents
XML 文档是 XML 信息的基本单元,由有序包装中的元素和其他标记组成。XML 文档可以包含种类繁多的数据。例如,数字数据库、表示分子结构的数字或数学方程式。
XML Document Example
以下示例中显示了一个简单的文档 −
<?xml version = "1.0"?>
<contact-info>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact-info>
下图说明了 XML 文档的各个部分。
Document Prolog Section
Document Prolog 位于文档顶部,在根元素之前。此部分包含 −
-
XML declaration
-
Document type declaration
您可以在第 XML Declaration 章中了解有关 XML 声明的更多信息
Document Elements Section
Document Elements 是 XML 的构建模块。它们将文档划分成一系列部分,每部分都用于特定的目的。您可以将文档分成多个部分,以便以不同的方式呈现它们或供搜索引擎使用。这些元素可以是容器,其中包含文本和其他元素的组合。
您可以在第 XML Elements 章中了解有关 XML 元素的更多信息
XML - Declaration
本章详细介绍了 XML 声明。 XML declaration 包含为 XML 处理器解析 XML 文档做准备的详细信息。它是可选的,但使用时,它必须出现在 XML 文档的第一行。
Syntax
以下语法显示 XML 声明 -
<?xml
version = "version_number"
encoding = "encoding_declaration"
standalone = "standalone_status"
?>
每个参数都包含一个参数名称、一个等号 (=) 以及引号内的参数值。下表详细显示了上述语法 -
Parameter |
Parameter_value |
Parameter_description |
Version |
1.0 |
指定所使用的 XML 标准版本。 |
Encoding |
UTF-8、UTF-16、ISO-10646-UCS-2、ISO-10646-UCS-4、ISO-8859-1 至 ISO-8859-9、ISO-2022-JP、Shift_JIS、EUC-JP |
它定义文档中使用的字符编码。UTF-8 是使用的默认编码。 |
Standalone |
yes or no |
它会告知解析器该文档是否依赖于外部来源(例如外部文档类型定义 (DTD))中的信息来获取其内容。默认值设置为否。将其设置为是会告诉处理程序解析文档不需要外部声明。 |
XML - Tags
让我们了解 XML 最重要的部分之一,即 XML 标记。 XML tags 构成了 XML 的基础。它们定义了 XML 中元素的作用域。它们还可以用于插入注释、声明解析环境所需的设置,以及插入特殊指令。
我们可以将 XML 标记大体分类如下 −
Empty Tag
出现在开始标记和结束标记之间的文本被称为内容。没有内容的元素称为空元素。可以使用以下两种方式来表示空元素 −
开始标记后立即跟着一个结束标记,如下所示 −
<hr></hr>
一个完整的空元素标记如下所示 −
<hr />
对于没有任何内容的任何元素,都可以使用空元素标记。
XML - Elements
XML elements 可以定义为 XML 的构建基块。元素可以充当容器来容纳文本、元素、属性、媒体对象或所有这些。
每个 XML 文档包含一个或多个元素,其范围由开始和结束标记(或对于空元素,由空元素标记)定界。
Syntax
以下是编写 XML 元素的语法 −
<element-name attribute1 attribute2>
....content
</element-name>
其中,
-
element-name 是元素的名称。名称大小写必须与开始和结束标记匹配。
-
attribute1, attribute2 是用空白分隔的元素属性,一个属性定义了一个元素的性质,它将一个名称关联到一个值(一个字符字段)上。属性的写法如下:
name = "value"
名称后面紧跟一个 = 号和一对双引号(“ ”)或单引号(' ')引起来的字符串值。
XML - Attributes
这一章描述了 XML attributes 。属性是 XML 元素的一部分。一个元素可以具有多个唯一的属性。属性提供了有关 XML 元素的更多信息。更准确地说,它们定义了元素的属性。XML 属性始终是名称-值对。
Syntax
XML 属性具有以下语法 −
<element-name attribute1 attribute2 >
....content..
< /element-name>
其中 attribute1 和 attribute2 具有以下形式 −
name = "value"
value 必须位于双引号 (“ ") 或单引号 (' ') 中。此处,attribute1 和 attribute2 是唯一的属性标签。
属性用于向元素添加唯一的标签,将标签置于一个类别中,添加布尔标志,或将它与某些数据字符串关联。以下示例演示了属性的使用 −
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE garden [
<!ELEMENT garden (plants)*>
<!ELEMENT plants (#PCDATA)>
<!ATTLIST plants category CDATA #REQUIRED>
]>
<garden>
<plants category = "flowers" />
<plants category = "shrubs">
</plants>
</garden>
属性用于区分同名元素,当您不想为每种情况都创建一个新元素时。因此,使用属性可以在区分两个或多个相似元素时添加更多细节。
在以上示例中,我们通过包括属性类别并将不同的值分配给每个元素来对植物进行分类。因此,我们有两个类别的植物,一类是花卉,另一类是灌木。因此,我们有两个带有不同属性的植物元素。
您还可以观察到我们在 XML 的开头声明了此属性。
Attribute Types
下表列出了属性类型 −
Attribute Type |
Description |
StringType |
它将任何文字字符串作为值。CDATA 是 StringType。CDATA 是字符数据。这意味着任何非标记字符的字符串都属于属性的合法部分。 |
TokenizedType |
这是一种更受限的类型。语法中指出的有效性约束在属性值标准化之后应用。标记类型属性的表示如下 − ID − 用于将元素指定为唯一。 IDREF − 用于引用另一个元素已命名的 ID。 IDREFS − 用于引用元素的所有 ID。 ENTITY − 表示该属性将在文档中表示一个外部实体。 ENTITIES − 这种属性将在文档中表示外部实体。 NMTOKEN − 它类似于 CDATA,它对哪些数据可以成为属性的一部分有限制。 NMTOKENS − 它类似于 CDATA,它对哪些数据可以成为属性的一部分有限制。 |
EnumeratedType |
它在声明中有一个预定义值的列表。必须从该列表中分配一个值。有两种类型的枚举属性 − NotationType − 声明元素将被引用到 XML 文档中其他位置声明的 NOTATION。 Enumeration − 枚举允许您定义属性值必须匹配的一个特定值列表。 |
XML - Comments
XML - Character Entities
本章介绍 XML Character Entities 。在我们理解字符实体之前,让我们先理解什么是 XML 实体。
正如 W3 Consortium 所说,实体的定义如下 −
这意味着实体是 XML 中的占位符。它们可以在文档序言或 DTD 中声明。实体有不同的类型,在本章中我们将讨论字符实体。
HTML 和 XML 都为它们的使用保留了一些符号,这些符号不能用作 XML 代码中的内容。例如, < 和 > 符号用于打开和关闭 XML 标记。为了显示这些特殊字符,使用了字符实体。
有一些特殊字符或符号无法直接从键盘输入。字符实体也可用于显示这些符号/特殊字符。
Types of Character Entities
共有三种类型的字符实体 −
-
Predefined Character Entities
-
Numbered Character Entities
-
Named Character Entities
Predefined Character Entities
引入它们是为了避免在使用某些符号时出现歧义。例如,当小于 ( < ) 或大于 ( > ) 符号与角度标记 ( <> ) 一起使用时,会观察到歧义。字符实体基本上用于在 XML 中定界标记。以下是 XML 规范中预定义字符实体的列表。这些字符可用于明确地表示字符。
-
Ampersand − &
-
Single quote − '
-
Greater than − >
-
Less than − <
-
Double quote − "
Numeric Character Entities
数字引用用于引用字符实体。数字引用可以是十进制或十六进制格式。由于有成千上万个数字引用,因此它们有点难以记住。数字引用通过其在 Unicode 字符集中的数字引用字符。
十进制数字引用的通用语法为 −
&# decimal number ;
十六进制数字引用的通用语法为 −
&#x Hexadecimal number ;
下表列出了一些带有数字值的预定义字符实体 −
Entity name |
Character |
Decimal reference |
Hexadecimal reference |
quot |
" |
" |
" |
amp |
& |
& |
& |
apos |
' |
' |
' |
lt |
< |
< |
< |
gt |
> |
> |
> |
XML - CDATA Sections
在本章中,我们将讨论 XML CDATA section 。术语 CDATA 表示,字符数据,CDATA 定义为解析器不解析的文本块,但仍作为标记识别。
&lt;, &gt;, 和 &amp; 这样的预定义实体需要输入,并且在标记中通常很难阅读,在这种情况下,可以使用 CDATA 部分,通过使用 CDATA 部分,您可以命令解析器,文档的特定部分不包含标记,并且应视为普通文本。
XML - WhiteSpaces
在本章中,我们将讨论 XML 文档中的 whitespace 处理。空白是一系列空格、制表符和换行符。它们通常用于使文档更容易阅读。
XML 文档包含两种类型的空白-有效空白和无效空白。两种空白的解释和示例如下。
Significant Whitespace
有效空白出现在包含文本和标记共同存在的元素中。例如 −
<name>TanmayPatil</name>
和
<name>Tanmay Patil</name>
上述两个元素不同,因为 Tanmay 和 Patil 之间有空格。在 XML 文件中读取此元素的任何程序都有义务保持区别。
Insignificant Whitespace
无效空白是指只允许元素内容的空格。例如 −
<address.category = "residence">
<address....category = "..residence">
上述示例相同。此处,空格用点号 (.) 表示。在上一个示例中,address 和 category 之间的空格是无效的。
可以将一个名为 xml:space 的特殊属性附加到元素。这表示应用程序不应为此元素删除空白。您可以将此属性设置为 default 或 preserve ,如下面的示例所示 −
<!ATTLIST address xml:space (default|preserve) 'preserve'>
其中,
-
值 default 表示应用程序的默认空白处理模式对于此元素是可以接受的。
-
preserve 值表示保留所有空格的应用程序。
XML - Processing
XML - Encoding
Encoding 是将 unicode 字符转换为其等效二进制表示的过程。XML 处理器读取 XML 文档时,它会根据编码类型对文档进行编码。因此,我们需要在 XML 声明中指定编码类型。
Encoding Types
主要有两种编码类型 −
-
UTF-8
-
UTF-16
UTF 表示 UCS 转换格式,UCS 本身表示通用字符集。数字 8 或 16 指的是用于表示字符的位数。它们要么是 8(1 到 4 个字节),要么是 16(2 或 4 个字节)。对于不包含编码信息的文档,默认设置为 UTF-8。
Syntax
编码类型包含在 XML 文档的前言部分。UTF-8 编码的语法如下 −
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
UTF-16 编码的语法如下 −
<?xml version = "1.0" encoding = "UTF-16" standalone = "no" ?>
Example
以下示例展示了编码声明 −
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<contact-info>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact-info>
在上面的示例中, encoding="UTF-8" 指定使用 8 位来表示字符。要表示 16 位字符,可以使用 UTF-16 编码。
经 UTF-8 编码的 XML 文件往往比经 UTF-16 格式编码的文件小。
XML - Validation
Validation 是一个验证 XML 文档的过程。如果 XML 文档的内容与其元素、属性和关联的文档类型声明 (DTD) 相匹配,并且该文档符合其中表达的约束,则该文档被称为有效的。XML 解析器以两种方式处理验证。它们为:
-
Well-formed XML document
-
Valid XML document
Well-formed XML Document
如果 XML 文档遵守以下规则,则该文档称为 well-formed :
-
非 DTD XML 文件必须@{{s0}、 apos(single quote) 、 gt(>) 、 lt(<) 、 quot(double quote) 这些预定义字符实体。
-
必须遵循标签的顺序。也就是说,内部标签必须在关闭外部标签前关闭。
-
每个打开标签必须有闭合标签或者必须是一个自结束标签(<标题>……</标题> 或 <title/>)。
-
起始标签中只能有一个属性,并需要加上引号。
-
amp(&) 、 apos(single quote) 、 gt(>) 、 lt(<) 、 quot(double quote) 除此之外的实体必须声明。
Example
以下是良好格式 XML 文档的示例 −
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address
[
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
上述示例被称之为良好格式,原因如下 −
-
它定义了文档的类型。此处,文档类型为 element 类型。
-
它包含一个名为 address 的根元素。
-
name、company 和 phone 等每个子元素都包含在其自释义标签中。
-
标签的顺序得到维护。
Valid XML Document
如果 XML 文档已正确格式化并关联有文档类型声明 (DTD),则称之为有效的 XML 文档。我们将在 XML - DTDs 章节中详细学习 DTD。
XML - DTDs
XML 文档类型声明,通常称为 DTD,是一种精确描述 XML 语言的方法。DTD 会检查 XML 文档结构的词汇和有效性,并与适当 XML 语言的语法规则对照。
XML DTD 可以指定在文档内部,或者保留在单独的文档中,然后单独引用。
Syntax
DTD 的基本语法如下−
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
在上述语法中,
-
DTD 以 <!DOCTYPE 分隔符开头。
-
一个 element 告诉解析器从指定的根元素解析文档。
-
DTD identifier 是文档类型定义的标识符,它可能是指向系统上文件的路径或指向互联网上文件的 URL。如果 DTD 指向外部路径,则称为 External Subset.
-
The square brackets [ ] 包含一个可选的实体声明列表,称为内部子集。
Internal DTD
如果元素是在 XML 文件中声明的,则 DTD 被称为内部 DTD。要将其称为内部 DTD,XML 声明中的 standalone 属性必须设为 yes 。这意味着,声明独立于外部资源。
Syntax
以下是内部 DTD 的语法:
<!DOCTYPE root-element [element-declarations]>
其中 root-element 是根元素的名称,element-declarations 是声明元素的位置。
Example
以下是内部 DTD 的一个简单示例 −
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
让我们浏览上述代码 −
Start Declaration − 使用以下声明开始 XML 声明。
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD − 在 XML 头之后,紧跟着文档类型声明,一般称为 DOCTYPE −
<!DOCTYPE address [
DOCTYPE 声明的元素名称开头带有一个感叹号 (!)。DOCTYPE 通知解析器此 XML 文档有一个 DTD 关联。
DTD Body − DOCTYPE 声明之后是 DTD 的主体,您在此声明元素、属性、实体和符号。
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
此处声明了多个元素,这些元素构成了 <name> 文档的词汇表。<!ELEMENT name (#PCDATA)>将元素 name 定义为 “#PCDATA” 类型。此处 #PCDATA 表示可解析的文本数据。
End Declaration − 最后,DTD 的声明部分使用关闭括号和关闭尖括号 ( ]> ) 关闭。这会有效结束定义,之后 XML 文档紧接着遵循。
External DTD
在外部 DTD 中,元素在 XML 文件之外声明。通过指定系统属性(可以是合法的 .dtd 文件或有效的 URL)来访问它们。为了将其作为外部 DTD 引用,必须将 XML 声明中的 standalone 属性设置为 no 。这意味着声明包括来自外部来源的信息。
Example
以下示例展示了外部 DTD 用法−
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
DTD 文件 address.dtd 的内容如下图所示:
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
XML - Schemas
XML Schema 通常称为 XML Schema Definition (XSD) 。它用于描述和验证 XML 数据的结构和内容。XML 模式定义元素、属性和数据类型。模式元素支持命名空间。它类似于描述数据库中数据的数据库模式。
Syntax
您需要在 XML 文档中声明模式,如下所示 −
Example
以下示例展示如何使用模式 −
<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = "contact">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string" />
<xs:element name = "company" type = "xs:string" />
<xs:element name = "phone" type = "xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML 模式背后的基本思想是它们描述了 XML 文档可以采用的合法格式。
Elements
正如我们在 XML - Elements 章节中所看到的,元素是 XML 文档的构建块。可以在 XSD 中如下定义元素 −
<xs:element name = "x" type = "y"/>
Definition Types
您可以通过以下方式定义 XML 模式元素 −
Simple Type
简单类型元素仅在文本上下文中使用。一些预定义的简单类型是:xs:integer、xs:boolean、xs:string、xs:date。例如 −
<xs:element name = "phone_number" type = "xs:int" />
Complex Type
复杂类型是其他元素定义的容器。这允许您指定哪些子元素一个元素可以包含,并在 XML 文档中提供一些结构。例如 −
<xs:element name = "Address">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string" />
<xs:element name = "company" type = "xs:string" />
<xs:element name = "phone" type = "xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
在上面的示例中,Address 元素由子元素组成。这是其他 <xs:element> 定义的容器,允许在 XML 文档中构建一个简单的元素层次结构。
Global Types
通过全局类型,您可以在文档中定义一个单一的类型,所有其他引用都可以使用它。例如,假设您想要对公司的不同地址对人和公司进行常规化。在这样的情况下,您可以按如下方式定义一个常规类型 −
<xs:element name = "AddressType">
<xs:complexType>
<xs:sequence>
<xs:element name = "name" type = "xs:string" />
<xs:element name = "company" type = "xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
现在让我们在我们的示例中按如下方式使用这种类型 −
<xs:element name = "Address1">
<xs:complexType>
<xs:sequence>
<xs:element name = "address" type = "AddressType" />
<xs:element name = "phone1" type = "xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name = "Address2">
<xs:complexType>
<xs:sequence>
<xs:element name = "address" type = "AddressType" />
<xs:element name = "phone2" type = "xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
无需分别为 Address1 和 Address2 定义名称和公司两次,我们现在只需进行一次定义。这使得维护更简单,即,如果您决定向地址添加“邮政编码”元素,则只需在某一位置添加它们即可。
XML - Tree Structure
XML 文档始终是描述性的。树结构通常称为 XML Tree ,它在轻松描述任何 XML 文档方面发挥着重要作用。
树结构包含根(父)元素、子元素等等。通过使用树结构,你可以了解从根开始的所有后续分支和子分支。解析从根开始,然后向下移动到一个元素的第一分支,从那里取第一个分支,依次类推到叶子节点。
Example
以下示例演示了简单的 XML 树结构 −
<?xml version = "1.0"?>
<Company>
<Employee>
<FirstName>Tanmay</FirstName>
<LastName>Patil</LastName>
<ContactNo>1234567890</ContactNo>
<Email>tanmaypatil@xyz.com</Email>
<Address>
<City>Bangalore</City>
<State>Karnataka</State>
<Zip>560212</Zip>
</Address>
</Employee>
</Company>
以下树结构表示上述 XML 文档 −
在上述图表中,有一个名为 <company> 的根元素。在其中,还有一个元素 <Employee>。在员工元素内部,有五个分支,分别命名为 <FirstName>、<LastName>、<ContactNo>、<Email> 和 <Address>。在 <Address> 元素内部,有三个子分支,分别命名为 <City> <State> 和 <Zip>。
XML - DOM
Document Object Model (DOM) 是 XML 的基础。XML 文档具有称为节点的信息单元层次结构;DOM 的作用是描述这些节点及其之间的关系。
DOM 文档是由以层次结构组织的节点或信息片段的集合。此层次结构允许开发人员浏览树,查找特定信息。由于 XML DOM 基于信息层次结构,因此 XML DOM 被称为基于树的。
另一方面,XML DOM 还提供了一个 API,允许开发人员在树的任何时间点添加、编辑、移动或者删除节点,以便创建应用程序。
Example
以下示例 (sample.htm) 将 XML 文档 (“address.xml”) 解析成 XML DOM 对象,然后用 JavaScript 从该对象中提取一些信息 −
<!DOCTYPE html>
<html>
<body>
<h1>TutorialsPoint DOM example </h1>
<div>
<b>Name:</b> <span id = "name"></span><br>
<b>Company:</b> <span id = "company"></span><br>
<b>Phone:</b> <span id = "phone"></span>
</div>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","/xml/address.xml",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
document.getElementById("name").innerHTML=
xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
document.getElementById("company").innerHTML=
xmlDoc.getElementsByTagName("company")[0].childNodes[0].nodeValue;
document.getElementById("phone").innerHTML=
xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
address.xml 的内容如下 −
<?xml version = "1.0"?>
<contact-info>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact-info>
现在让我们将这两个文件 sample.htm 和 address.xml 保存在同一个目录 /xml 中,并通过在任何浏览器中打开 sample.htm 文件来执行该文件。这应该会产生以下输出。
在这里,您可以了解到如何提取每个子节点以显示其值。
XML - Namespaces
Namespace 是唯一名称的集合。命名空间是一种机制,通过它可以将元素和属性名分配给一个组。命名空间由 URI(统一资源标识符)识别。
Namespace Declaration
命名空间使用保留的属性声明。这样一种属性名必须是 xmlns 或以 xmlns: 开头,如下所示 −
<element xmlns:name = "URL">
Example
命名空间只影响文档中的有限区域。包含声明及其所有后代的元素都在命名空间的作用域中。以下是 XML 命名空间的一个简单示例 −
<?xml version = "1.0" encoding = "UTF-8"?>
<cont:contact xmlns:cont = "www.tutorialspoint.com/profile">
<cont:name>Tanmay Patil</cont:name>
<cont:company>TutorialsPoint</cont:company>
<cont:phone>(011) 123-4567</cont:phone>
</cont:contact>
在这里,命名空间前缀是 cont ,命名空间标识符(URI)是 www.tutorialspoint.com/profile。这意味着具有 cont 前缀(包括联系元素)的元素名和属性名都属于 www.tutorialspoint.com/profile 命名空间。
XML - Databases
XML Database 用于以 XML 格式存储大量的信息。随着各个领域中对 XML 的使用日益增多,需要有一个安全的地方来存储 XML 文档。存储在数据库中的数据可以使用 XQuery 查询、序列化并导出为所需的格式。
XML - Enabled Database
支持 XML 的数据库只不过是为 XML 文档转换提供的扩展。这是一个关系数据库,其中数据存储在由行和列组成的表中。表包含一组记录,而记录又包含字段。
Native XML Database
原生 XML 数据库基于容器而不是表格格式。它可以存储大量的 XML 文档和数据。原生 XML 数据库通过 XPath 表达式查询。
原生 XML 数据库比启用 XML 的数据库有优势。它非常有能力存储、查询和维护 XML 文档,而启用 XML 的数据库则不能。
Example
以下示例演示了 XML 数据库 −
<?xml version = "1.0"?>
<contact-info>
<contact1>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact1>
<contact2>
<name>Manisha Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 789-4567</phone>
</contact2>
</contact-info>
这里创建了一个联系人表,其中包含联系人的记录(contact1 和 contact2),而联系人记录又包含三个实体 − 名称、公司和电话。
XML - Viewers
这一章节对各种 methods to view an XML document 进行了描述。可以使用一个简单的文本编辑器或任何浏览器来查看 XML 文档。大多数主流浏览器都支持 XML。XML 文件可以通过双击 XML 文档(如果它是一个本地文件)或者在地址栏中键入 URL 路径(如果该文件位于服务器上),以与我们以相同的方式在浏览器中打开其他文件的方式在浏览器中打开。XML 文件以 ".xml" 扩展名保存。
让我们探讨各种查看 XML 文件的方法。使用以下示例 (sample.xml) 来查看此章的所有章节。
<?xml version = "1.0"?>
<contact-info>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</contact-info>
XML - Editors
XML Editor 是一个标记语言编辑器。可以通过现有的编辑器(如记事本、写字板或任何类似的文本编辑器)编辑或创建 XML 文档。您还可以在线查找专业 XML 编辑器或下载,该编辑器具有更强大的编辑功能,例如:
-
自动关闭未关闭的标签。
-
It strictly checks syntax.
-
使用颜色突出显示 XML 语法以提高可读性。
-
帮助您编写有效的 XML 代码。
-
提供针对 DTD 和模式的 XML 文档的自动验证。
Open Source XML Editors
以下是一些开源 XML 编辑器:
-
Online XML Editor − 这是一个可以在线使用的轻量级 XML 编辑器。
-
Xerlin − Xerlin 是一个适用于 Java 2 平台的开源 XML 编辑器,采用 Apache 许可证发布。这是一个基于 Java 的 XML 建模应用程序,可以轻松创建和编辑 XML 文件。
-
CAM - Content Assembly Mechanism − CAM XML 编辑器工具随 Oracle 赞助的 XML+JSON+SQL Open-XDX 一起提供。
XML - Parsers
XML parser 是一个软件库或一个包,它提供接口,让客户端应用程序能够处理 XML 文档。它检查 XML 文档是否格式正确,还可以验证 XML 文档。现代浏览器具有内置的 XML 解析器。
下图显示了 XML 解析器如何与 XML 文档进行交互 −
解析器的目标是将 XML 转换称可读代码。
为了简化解析过程,一些商用产品可用于促进 XML 文档的分解并产生更可靠的结果。
以下是常用的一些解析器:
-
MSXML (Microsoft Core XML Services) − 这是一个由 Microsoft 提供的标准 XML 工具集,其中包括一个解析器。
-
System.Xml.XmlDocument − 此类是 .NET 库的一部分,该库包含许多与 XML 相关的不同类。
-
Java built-in parser − Java 库有自己的解析器。该库的设计让您可以将内置解析器替换为外部实现,例如 Apache 或 Saxon 的 Xerces。
-
Saxon − Saxon 为解析、转换和查询 XML 提供工具。
-
Xerces − Xerces 在 Java 中实现,由著名的开源 Apache 软件基金会开发。
XML - Processors
当软件程序读取 XML 文档并相应采取操作时,这称为处理 XML。能读取和处理 XML 文档的任何程序都称为 XML 处理器。XML 处理器读取 XML 文件并将其转换为程序其他部分可访问的在内存结构中。
最基本的 XML 处理器读取 XML 文档并将其转换为供其他程序或子例程使用的内部表示。这称为解析器,它是每个 XML 处理程序的重要组成部分。
处理器涉及处理说明,这可以在章节 Processing Instruction 中研究。
Types
XML 处理器根据是否检查 XML 文档的有效性分为 validating 或 non-validating 类型。发现有效性错误的处理器必须能够报告此错误,但可以继续正常处理。
A few validating parsers are − xml4c(IBM,在 C++ 中)、xml4j(IBM,在 Java 中)、MSXML(Microsoft,在 Java 中)、TclXML(TCL)、xmlproc(Python)、XML::Parser(Perl)、Java Project X(Sun,在 Java 中)。
A few non-validating parsers are − OpenXML(Java)、Lark(Java)、xp(Java)、AElfred(Java)、expat ©、XParse(JavaScript)、xmllib(Python)。