转自 : http://developer.51cto.com/art/200903/115458_1.htm
如果您是 XML 新手,本文将为您介绍 XML 文档的基础结构,以及创建构造良好的 XML 需要遵循的规则,包括命名约定、正确的标记嵌套、属性规则、声明和实体。您还可以从本文了解到 DTD 和 schema 的验证。
XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。您创建的文件,或文档实例 由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。SGML 比较复杂,HTML(实际上仅是一组元素集)在识别信息方面不够强大。XML 则是一种易于使用和易于扩展的标记语言。
您可以使用 XML 创建自己的元素,从而能够更精确地表示自己的信息。您可以在文档内部识别每个部分,而不是将文档看作仅由标题和段落组成。为了提高效率,您可能需要定义数量一定的元素,并统一使用它们。(您可以在文档类型定义(Document Type Definition, DTD )或模式 (schema)中定义元素,稍后我将对此进行简要的描述)。一旦习惯使用 XML 之后,就可以在构建文件时尝试处理元素名称。
构建 XML
如前所述,XML 文件由内容和标记组成。您通过以标记包围内容的方式将大部分内容包含在元素中。例如,假设您需要创建一本 XML 烹饪书。您需要用 XML 编写名为 Ice Cream Sundae 的食谱。为了标记食谱名,您需要将这个文本包含到元素中,即分别在文本的首末两端添加开始和结束标记。可以将元素命名为 recipename。要标记元素的开始标记,像这样将元素名放到尖括号中(﹤﹥):﹤recipename﹥。然后输入文本 Ice Cream Sundae。在文本的后面输入结束标记,即将元素名放在尖括号内,然后在元素名前面加上一个终止斜杠(/),比如:﹤/recipename﹥。这些标记构成一个元素,您可以在元素的内部添加内容或其他元素。
您可以为某个文档或文档集创建元素名。可以创建规则让元素根据您的特定需求组合起来。元素名可以是比较具有针对性的,也可以是比较通用的。您还可以创建决定添加何种元素的规则。这些规则可以是严格的,也可以是松散的,这完全由您决定。一定要为文档创建元素,以识别您认为重要的部分。
开始创建 XML 文件
XML 文档的第一行可以是一个 XML 声明。这是文件的可选部分,它将文件识别为 XML 文件,有助于工具和人类识别 XML(不会误认为是 SGML 或其他标记)。可以将这个声明简单地写成 ﹤?xml?﹥,或包含 XML 版本(﹤?xml version="1.0"?﹥),甚至包含字符编码,比如针对 Unicode 的 ﹤?xml version="1.0" encoding="utf-8"?﹥。因为这个声明必须出现在文件的开头,所以如果打算将多个小的 XML 文件合并为一个大 XML 文件,则可以忽略这个可选信息。
创建根元素
根元素的开始和结束标记用于包围 XML 文档的内容。一个文件只能有一个根元素,并且需要使用 “包装器” 包含它。清单 1 显示了经过删节的示例,其中的根元素名为 ﹤recipe﹥。(参见 下载 小节获得完整的 XML 文件)。
清单 1. 根元素
﹤?xml version="1.0" encoding="UTF-8"?﹥
﹤recipe﹥
﹤/recipe﹥
在构建文档时,内容和其他标记必须放在 ﹤recipe﹥ 和 ﹤/recipe﹥ 之间。
命名元素
标记的大小写保持一致
创建 XML 时,要确保开始和结束标记的大小写是一致的。如果大小写不一致,在使用或查看 XML 时将出现错误。例如,如果大小写不一致,Internet Explorer 将不能显示文件的内容,但它会显示开始和结束标记不一致的消息。
到目前为止,都使用 ﹤recipe﹥ 作为根元素。在 XML 中,先要为元素选择名称,然后再根据这些名称定义相应的 DTD 或 schema。创建名称时可以使用英文字母、数字和特殊字符,比如下划线(_)。下面给出命名时需要注意的地方:
元素名中不能出现空格。
名称只能以英文字母开始,不能是数字或符号。(在第一个字母之后就可以使用字母、数字或规定的符号,或它们的混合)。
对大小写没有限制,但前后要保持一致,以免造成混乱。
我们继续以前面的示例为例,如果添加了名为 ﹤recipename﹥ 的元素,它将有一个开始标记 ﹤recipename﹥ 和相应的结束标记 ﹤/recipename﹥。
清单 2. 更多元素
﹤?xml version="1.0" encoding="UTF-8"?﹥
﹤recipe﹥
﹤recipename﹥Ice Cream Sundae﹤/recipename﹥
﹤preptime﹥5 minutes﹤/preptime﹥
﹤/recipe﹥
XML 文档可以使用内部不包含任何内容的空标记,这些标记可以表示为单个标记,而不是一组开始和结束标记。以类似于 HTML 的文件为例,里面的 ﹤img src="mylogo.gif"﹥ 是一个独立的元素。它不包含任何子元素或文本,因此它是一个空元素,您可以将它表示为 ﹤img src="mylogo.gif" /﹥(以一个空格和熟悉的终止斜杠结束)。
嵌套元素
嵌套 即把某个元素放到其他元素的内部。这些新的元素称为子 元素,包含它们的元素称为父 元素。﹤recipe﹥ 根元素中嵌套有几个其他元素,如 清单 3 所示。这些嵌套的子元素包括 ﹤recipename﹥、﹤ingredlist﹥ 和 ﹤preptime﹥。﹤ingredlist﹥ 元素内部包含多个子元素 ﹤listitem﹥。XML 文档可以使用多层嵌套。
一个常见的语法错误是父元素和子元素的错误嵌套。任何子元素都要完全包含在其父元素的开始和结束标记内部。每个同胞(Sibling)元素必须在下一个同胞元素开始之前结束。
清单 3 的代码显示了正确的嵌套。这些标记的开始和结束没有与其他标记混合 在一起。
清单 3. 正确嵌套的 XML 元素
﹤?xml version="1.0" encoding="UTF-8"?﹥
﹤recipe﹥
﹤recipename﹥Ice Cream Sundae﹤/recipename﹥
﹤ingredlist﹥
﹤listitem﹥
﹤quantity﹥3﹤/quantity﹥
﹤itemdescription﹥chocolate syrup or chocolate fudge﹤/itemdescription﹥
﹤/listitem﹥
﹤listitem﹥
﹤quantity﹥1﹤/quantity﹥
﹤itemdescription﹥nuts﹤/itemdescription﹥
﹤/listitem﹥
﹤listitem﹥
﹤quantity﹥1﹤/quantity﹥
﹤itemdescription﹥cherry﹤/itemdescription﹥
﹤/listitem﹥
﹤/ingredlist﹥
﹤preptime﹥5 minutes﹤/preptime﹥
﹤/recipe﹥
添加属性
有时候要为元素添加属性。属性由一个名称-值对构成,值包含在双引号中("),比如:type="dessert"。属性是在使用元素时存储额外信息的一种方式。在同一个文档中,可以根据需要对每个元素的不同实例采用不同的属性值。
您可以在元素的开始标记内部输入一个或多个属性,比如:﹤recipe type="dessert"﹥。如果要添加多个属性,各个属性之间使用空格分开,比如:﹤recipename cuisine="american" servings="1"﹥。清单 4 显示了当前的 XML 文件。
清单 4. 带有元素和属性的 XML 文件
﹤?xml version="1.0" encoding="UTF-8"?﹥
﹤recipe type="dessert"﹥
﹤recipename cuisine="american" servings="1"﹥Ice Cream Sundae﹤/recipename﹥
﹤preptime﹥5 minutes﹤/preptime﹥
﹤/recipe﹥
您可以根据需要使用任意数量的属性。要考虑需要添加到文档的细节。如果要对文档分类,属性尤其有用,比如按照菜谱的 type 进行分类。属性名可以包含在元素名中使用的字符,规则也是类似的,即字符之间不能带有空格,名称只能以字母开始。
构造良好并且有效的 XML
如果您根据结构规则创建 XML,就很容易实现构造良好的 XML。构造良好的 XML 即遵循所有 XML 规则创建的 XML:正确的元素命名,嵌套,属性命名等等。
要实现构造良好的 XML 取决于如何处理 XML。但考虑一下前面提到的示例,它要求根据菜谱类型进行分类。您需要确保每个 ﹤recipe﹥ 元素都包含 type 属性,以对菜谱进行分类。能够正确验证并确保存在属性值是非常重要的(避免出现双关语)。
验证 就是根据元素规则检查文档的结构,以及如何为每个父元素定义子元素。这些规则是在 文档类型定义(Document Type Definition,DTD)或模式(schema )中定义的。验证要求您创建自己的 DTD 或 schema ,然后在 XML 文件中引用 DTD 或 schema 文件。
为了实现验证,必须在 XML 文档的顶部附近包含文档类型(DOCTYPE)。这行代码将引用用于验证文档的 DTD 或 schema (元素和规则列表)。例如,DOCTYPE 可能类似于 清单 5。
清单 5. DOCTYPE
﹤!DOCTYPE MyDocs SYSTEM "filename.dtd"﹥
这个例子假设元素列表文件的名称是 filename.dtd,并且位于您的计算机上(如果指向公共文件位置,则 SYSTEM 和 PUBLIC 是相对的)。
使用实体
实体 可以是文本短语或特殊字符。它们可以指向内部或外部。必须正确地声明和表示实体,以避免错误和确保正确显示。
您不能直接在内容中输入特殊字符。如果要在文本中使用符号,必须使用它的字符代码将它设置为实体。您可以将短语(比如公司名)设置为实体,然后就可以在内容中使用该实体。为了设置实体,必须先为它创建一个名称,然后将它输入到内容中,以 and 符号(&)开始,并以分号(;)结束 — 例如,&coname;。然后在 DOCTYPE 的方括号([])内部输入代码,如 清单 6 所示。这个代码识别表示实体的文本。
清单 6. ENTITY
﹤!DOCTYPE MyDocs SYSTEM "filename.dtd" [ ﹤!ENTITY coname "Rabid Turtle
Industries"
]﹥
使用实体可以避免反复输入相同的短语和信息。在很多情况下它还使得调整文本更加容易(变更公司名时),只需对实体定义进行简单调整。
避免错误
在学习创建 XML 文件时,在 XML 编辑器中打开它,以检查它的结构是否良好,并且确保您遵循 XML 规则。例如,如果您使用 Windows® Internet Explorer®,就可以在浏览器中打开 XML。如果它能够显示 XML 元素、属性和内容,则表明 XML 是构造良好的。相反,如果显示错误,则很可能是出现语法错误,您需要小心检查文档,看看是不是丢失标记和标点符号或输入错误。
如在 嵌套元素 小节中提到的一样,包含其他元素的元素就是被包含元素的父元素。在下面的示例中,﹤recipe﹥ 是根元素,并且包含文件的完整内容。父元素 ﹤recipe﹥ 包含的子元素有 ﹤recipename﹥、﹤ingredlist﹥、﹤directions﹥ 等等。在这种结构中,﹤recipename﹥、﹤ingredlist﹥ 和 ﹤directions﹥ 成了同胞元素。此外,还要正确嵌套同胞 元素。清单 7 给出了构造良好并且正确嵌套的 XML。
清单 7. 构造良好的 XML
﹤?xml version="1.0" encoding="UTF-8"?﹥
﹤recipe type="dessert"﹥
﹤recipename cuisine="american" servings="1"﹥Ice Cream Sundae﹤/recipename﹥
﹤ingredlist﹥
﹤listitem﹥﹤quantity units="cups"﹥0.5﹤/quantity﹥
﹤itemdescription﹥vanilla ice cream﹤/itemdescription﹥﹤/listitem﹥
﹤listitem﹥﹤quantity units="tablespoons"﹥3﹤/quantity﹥
﹤itemdescription﹥chocolate syrup or chocolate fudge﹤/itemdescription﹥﹤/listitem﹥
﹤listitem﹥﹤quantity units="tablespoons"﹥1﹤/quantity﹥
﹤itemdescription﹥nuts﹤/itemdescription﹥﹤/listitem﹥
﹤listitem﹥﹤quantity units="each"﹥1﹤/quantity﹥
﹤itemdescription﹥cherry﹤/itemdescription﹥﹤/listitem﹥
﹤/ingredlist﹥
﹤utensils﹥
﹤listitem﹥﹤quantity units="each"﹥1﹤/quantity﹥
﹤utensilname﹥bowl﹤/utensilname﹥﹤/listitem﹥
﹤listitem﹥﹤quantity units="each"﹥1﹤/quantity﹥
﹤utensilname﹥spoons﹤/utensilname﹥﹤/listitem﹥
﹤listitem﹥﹤quantity units="each"﹥1﹤/quantity﹥
﹤utensilname﹥ice cream scoop﹤/utensilname﹥﹤/listitem﹥
﹤/utensils﹥
﹤directions﹥
﹤step﹥Using ice cream scoop, place vanilla ice cream into bowl.﹤/step﹥
﹤step﹥Drizzle chocolate syrup or chocolate fudge over the ice cream.﹤/step﹥
﹤step﹥Sprinkle nuts over the mound of chocolate and ice cream.﹤/step﹥
﹤step﹥Place cherry on top of mound with stem pointing upward.﹤/step﹥
﹤step﹥Serve.﹤/step﹥
﹤/directions﹥
﹤variations﹥
﹤option﹥Replace nuts with raisins.﹤/option﹥
﹤option﹥Use chocolate ice cream instead of vanilla ice cream.﹤/option﹥
﹤/variations﹥
﹤preptime﹥5 minutes﹤/preptime﹥
﹤/recipe﹥
注意:换行符方便您阅读代码,它不会影响 XML。
您可以在测试文件上进行实践,去掉开始和结束标记,熟悉因此显示的错误消息。
查看 XML
在 图 1 中,Internet Explorer 清晰显示了所有元素。内容包含在开始和结束标记之间。父元素旁边有小加号(+)和小减号(-),它们允许您展开或收缩嵌套在内部的所有元素(它们的后代)。
图 1. 收缩了一些同胞元素的示例 XML 实例(文件)
结束语
除了一些简单的规则之外,您可以随意设计 XML 元素和属性。XML 的规则并不难。真正困难的是 根据可分类性和可搜索性找出文档中有价值的内容,然后根据您的需要设计元素和属性。
当您有了明确的目标,并知道如何标记内容的时候,您可以构建高效的元素和属性了。从这个角度看,小心进行标记是创建构造良好并且有效的 XML 的根本条件。
相关推荐
### TinyXML入门教程知识点详解 #### 一、XML简介与TinyXML概述 - **XML**:全称为**可扩展标记语言**(EXtensible Markup Language),是一种用于标记数据的语言,允许用户自定义数据的标识,从而区分不同类型的结构...
资源名称:XML入门经典(第5版)内容简介:《XML入门经典(第5版)》的主要内容如下:介绍XML的目标以及构建它的规则;探索不同的技术以协助完成对XML的正确格式的验证;展示如何使用XQuery创建新的XML文档并查询已有...
### XML入门教程精要 #### 1. XML简介与背景 **XML**(eXtensible Markup Language)是一种可扩展标记语言,由W3C联盟发展维护。与HTML不同,XML是一种元语言,允许用户自定义标签,从而描述数据本身及其结构。XML的...
《XML入门经典(第4版)》能帮助您快速从XML的基础知识提升到更为高级的编程技术中,您将深入钻研XML和数据库的使用艺术,包括如何查询XML信息、检索XML数据和创建新的XML文档等等。此外,您还将学会如何在Web上发布...
这个压缩包文件提供了一个很好的XML入门教程,适合初学者进行学习和实践。以下是一些关于XML的基础知识和关键概念: 1. **XML的定义**:XML是一种可扩展的标记语言,与HTML类似,但其设计目标是为了传输和存储数据...
在TinyXML入门教程中,你可能会学到以下关键概念: 1. **XML元素(Element)**:XML文档的基本组成单元,由标签、属性和内容构成。例如,`<book>`就是一个元素,可能包含属性(如`id="123"`)和内容(如`编程艺术...
综上所述,C# XML入门经典涵盖了从XML基本概念到高级应用的诸多方面,包括XML的解析、操作、序列化、配置文件、Web服务以及与数据库的集成。掌握这些技能将极大地提升C#开发者在数据处理和系统集成中的能力。通过...
文件中提及的标题为"C# XML入门经典.pdf",说明这本书籍主要面向的是已经具备一定C#编程基础,但是对XML技术尚缺乏了解的开发人员。描述中对PDF格式的强调,并没有提供额外的信息,而标签"XML"则点明了书籍的技术...
《XML入门经典(第五版)》是一本深入浅出介绍XML的教材,其源代码包含了一系列的XML课程设计项目案例,旨在帮助读者更好地理解和实践XML的相关技术。 1. **XML基本概念** - XML是一种自描述性的文本格式,它的...
XML,全称可扩展标记语言(Extensible Markup Language),是一种用于标记数据的语言,它在IT领域扮演着重要的角色,尤其在数据交换、配置文件、文档结构化等方面。本资源是“XML编程从入门到精通”PDF书籍,旨在...
对于初学者来说,XML入门教程是一个很好的起点,能够帮助理解XML的基本概念和语法,以及如何在实际项目中应用。 XML的基础知识点包括: 1. **XML文档结构**:XML文档由一系列元素组成,每个元素都可以包含其他元素...
《C# XML入门经典》是一本专为初学者设计的编程教材,主要涵盖了C#语言与XML(Extensible Markup Language)的基础知识。XML作为一种数据交换和存储格式,被广泛应用于各种软件开发中,包括Web服务、数据库交互以及...
《XML入门经典(第5版)》是一本深入浅出介绍XML基础和实践的书籍,源码部分通常包含了各种示例和练习,帮助读者更好地理解XML的语法和应用。 XML的核心概念包括: 1. **结构化数据**:XML通过标签定义数据的结构,...
本资源“C-#XML入门经典随书源码”提供了一套学习C# XML编程的基础材料,旨在帮助初学者快速掌握如何在C#环境中利用XML。这本书可能涵盖了以下几个核心知识点: 1. **XML基础**:介绍XML的基本结构和语法规则,包括...
- 加载XML文档:使用`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`解析XML文件,得到`Document`对象。 - 创建Java对象:使用XMLBean生成的类,通过构造函数实例化对象。 - 将XML数据绑定到Java...
《C#版XML入门经典》这本书旨在帮助初学者掌握C#语言环境下XML的使用方法。 一、XML基础 XML的设计目标是传输和存储数据,而不是显示数据。它以自解释的方式定义了数据结构,通过标签来描述数据。例如: ```xml ...
3. **文本内容(Text Content)**:元素可以包含文本,如`<title>XML入门指南</title>`。 4. **命名规则**:XML的元素和属性名必须遵循一定的规则,如不能以数字开头,不能包含特殊字符等。 5. **命名空间...
学习XML需要掌握其基本概念、语法和相关技术,如XPath用于查询XML文档,XSLT用于转换XML数据,以及DOM(文档对象模型)用于程序访问和操作XML内容。这些工具和技术共同构成了XML生态系统,为现代软件开发提供了强...
QT35-C# XML入门经典源代码全集是一份针对初学者和开发者设计的资源,旨在帮助他们理解和掌握XML(可扩展标记语言)在C#编程环境中的应用。XML是一种广泛应用的数据交换和存储格式,因其结构化、自描述性而备受青睐...
- **XmlWriter类**:流式写入XML文档,如`using (XmlWriter writer = XmlWriter.Create("output.xml")) {...}`。 7. **DOM、SAX和StAX解析方式**: - **DOM(Document Object Model)**:将整个XML加载到内存,...