1.什么是XML
XML(可扩展标记语言)是一种用于表示电子文档的标记语言,它被设计用来传输和存储数据。与HTML不同,XML不是用来显示数据,而是用来描述数据的结构和内容。XML具有可扩展性,可以通过自定义标签来表示不同类型的信息,而且可以被多个不同的应用程序和平台支持和解析。XML是一种非常灵活和强大的标记语言,被广泛应用于Web服务、数据交换、文档存储、配置文件等领域。
2.为什么要学习XML
1. XML被广泛应用于Web开发、数据交换、文档存储、配置文件等领域,掌握XML技术可以让你更好地理解和处理这些领域中的数据和信息。
2. XML具有灵活性和可扩展性,在不同的应用中可以通过自定义标签来表示和描述不同类型的信息,这样可以为数据管理和处理提供更多的选择和机会。
3. XML是许多技术和工具的基础,例如Web服务、SOAP、REST、XML Schema、XPath、XSLT等,学习XML可以让你更好地理解和应用这些技术和工具。
4. XML的语法简单易学,学习成本不高,任何人都可以通过简单的教程和例子快速入门XML基础知识。掌握XML技术可以为你在IT领域的职业发展提供更广泛的机会和前景。
总之,学习XML对于任何从事计算机或Web开发相关工作的人来说都是非常有价值的。
3.XML的作用
3.1数据交互
一个XML数据交互的实例可以是两个不同的系统之间的数据交换。例如,假设有一个电商网站,使用一个不同的系统来处理订单和库存。这两个系统需要通过API进行数据交换,以确保两个系统之间的数据始终保持同步。实例如下:
<!-- RESTful Web服务的请求 --> <request> <method>GET</method> <url>https://api.example.com/products/123</url> <headers> <header> <name>Authorization</name> <value>Bearer a1234567890abcdef</value> </header> </headers> </request> <!-- RESTful Web服务的响应 --> <response> <status>200</status> <headers> <header> <name>Content-Type</name> <value>application/xml</value> </header> </headers> <body> ... </body> </response>
在上述代码中,XML被用来描述RESTful Web服务的请求和响应。这种格式可以使得应用程序在不同的系统之间更轻松地进行交互和通信。
3.2做配置
XML可以作为应用程序的配置文件格式,如JavaEE的Spring框架中,可以使用XML格式的配置文件来配置和管理程序的Bean和依赖关系,这样可以让整个应用程序更易于配置、协作和管理。我们假设有一个音乐播放器程序,需要将用户的偏好设置保存到一个配置文件中,以便在下一次启动时加载。如下:
<?xml version="1.0" encoding="UTF-8"?> <config> <volume>75</volume> <shuffle>true</shuffle> <repeat>false</repeat> <theme>dark</theme> </config>
其中定义了四个配置项:音量、是否随机播放、是否循环播放以及主题。这些项可以通过程序进行读取和修改,从而定制音乐播放器的行为和外观。
用XML作为配置文件格式的好处在于:它可以很容易地扩展和修改。如果以后需要增加更多的配置选项,只需要添加针对新选项的标签即可。
另外,据我所知程序可以使用解析器读取配置文件,然后将配置项加载到应用程序中。然后应用程序可以通过修改配置项来动态地修改配置文件内容,以此来实现定制软件。
4.标准的XML格式
4.1有且只有一个根元素
下面是一个标准格式的XML,如下:
<?xml version="1.0" encoding="UTF-8"?> <persons> <person pid="p1" sex="男" qq="aaa" parent="p2"> <name>大明</name> <age>35</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person pid="p2"> <name>二明</name> <age>20</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>
我们会发现它有且只有一个根元素,如下:
XML文档必须只有一个根元素。这个根元素包含文档中的所有其他元素和内容。如果文档中有多个根元素,那么它将不符合XML规范,不能被正确解析。
4.2XML标签大小写正确区分
XML是一种大小写敏感的语言。例如以下两个标签是不同的:
<Tag1>我是大明</Tag1> <tag1>我是二明</tag1>
这两个标签虽然只有大小写的差异,但它们在XML中中被视为完全不同的标签。所以我们在写XML时应该特别注意标签的大小写,以确保它们被正确识别和解析。
4.3正确使用结束标签
XML结束标签是用来标明元素的结束的,每个开始标签都应该有一个相应的结束标签。以下是一个正确使用XML结束标签的例子:
<book> <title>XML解析入门</title> <author>Kissship</author> <publisher>Kissship出版社</publisher> </book>
在这个例子中,开始标签 <book>
有相应的结束标签 </book>
,所有的子元素都被包含在这一对标签之间。同样,每个子元素都有一个相应的结束标签来标识元素的结束。
4.4正确嵌套标签
XML标记是可以嵌套的,这意味着一个元素可以作为另一个元素的子元素出现。以下是一个正确嵌套标签的例子:
<company> <employee> <name>Kissship</name> <title>职业打手</title> <department>完美竞技S段</department> </employee> <employee> <name>小君迷人</name> <title>CS小白</title> <department>完美竞技C+</department> </employee> </company>
在这个例子中,<employee>元素是 company 元素的子元素,<name>,<title>
和 <department>
元素是 employee
元素的子元素。这种嵌套结构可以使XML文档变得更有组织和易于解析。
注意:在正确嵌套标记时,标记的打开和关闭顺序非常重要,因为最后打开的标记必须最先关闭,以确保文档的正确性。
4.5使用了合法的标签名
XML标签名必须遵守以下规则:
- 标签名必须以字母或下划线开头。
- 标签名的第一个字母后可以是字母、数字、.、- 或下划线。
- 标签名中不能包含空格。
- 标签名大小写敏感。
- 标签名必须以闭合尖括号 “>” 结束。
这里给大家举一些例子,如下:
//合法的标签名 <tag_name> <Person> <First_Name> //不合法的标签名 <1st_tag> // 标签名不能以数字开头 <tag name> // 标签名不能包含空格 <Tag/> // 标签名不能以 "/" 结尾
这些规则对于编写合法的XML文档而言很重要,不能遵守这些规则可能会导致解析错误或不被认可的XML文档,还可能导致与其他工具或系统不兼容等等问题。
4.6定义有效的属性
下面是XML属性的有效规则:
- 属性名称必须以字母或下划线开头,不能以数字或标点符号开头。
- 属性名称中不能包含空格或其他无效字符。
- 属性值必须使用引号(单引号或双引号)括起来。
- 如果属性值中包含了引号,它必须使用与属性值开始处相同的引号进行括起来。
这里需要提一点的是:不仅属性值需要被引号括起来,而且属性名称也应该全部使用小写字母。这是因为XML对大小写是敏感的。如果属性名称不是小写字母,解析器可能会认为此属性不存在,从而引发解析错误。例如以下错误的代码:
<product id=1 name=Phone><description>这里是来自CSGO道哥的专场</description></product>
正确的写法应该为:
<product id="1" name="Phone"><description>如果你在沙二遇到道哥提溜闪</description></product>
使用引号括起属性值是确保XML文档中数据正确解析的关键。如果没有引号,解析器将无法正确识别属性值,从而可能导致解析错误或数据丢失。
5.元素定义
5.1在XML中加入DTD声明
DTD声明是放置在XML文档的开头的一行代码,通常采用以下格式:
<!DOCTYPE root_element SYSTEM "root_element.dtd">
如果XML文档没有明确声明DTD,则解析器将无法验证文档的结构。明确声明和使用DTD可以让开发人员更好地理解、验证和处理XML文档的结构。
5.2元素的分类
5.2.1空元素
在DTD中,空元素是指不包含任何内容的元素。可以使用 EMPTY
关键字来定义空元素。以下是一个使用 EMPTY
定义空元素的例子,如下:
<!ELEMENT br EMPTY>
5.2.2文本元素
在DTD中,文本元素是一种特殊类型的元素,它只包含文本字符(不包括其他的子元素或标记)。
以下是一个使用 CDATA
定义文本元素的例子,如下:
<!ELEMENT title (#PCDATA)>
5.2.3混合元素
在DTD中,混合元素是指一种特殊的元素类型,它可以包含文本和其他元素。混合元素的子元素的顺序和出现次数是不确定的,这使得这种元素的结构更为灵活。可以使用 MIXED
关键字来定义混合元素,以下是一个使用 MIXED
定义混合元素的例子,如下:
<!ELEMENT paragraph (#PCDATA | emphasis)*> <!ELEMENT emphasis (#PCDATA)>
总的来说,DTD中的元素是XML文档结构的基础,可以通过DTD来定义特定的元素类型及其结构。通过对DTD元素的定义,可以确保XML文档的结构正确,从而提高XML文档的可读性和可维护性。
5.3元素的限制
在DTD中,可以通过使用一些限制来约束和限定元素内容和结构,确保XML文档结构的正确性。下面是一些常见的DTD元素的限制:
(
和)
:用于括起元素可以包含的子元素,也用于指定子元素出现的顺序。*
:表示子元素可以出现零次或多次。+
:表示子元素可以出现一次或多次。?
:表示子元素可以出现零次或一次。|
:用于指定元素可以包含的不同类型的子元素之一。,
:用于指定多个连续的、相同类型的子元素出现的顺序。#PCDATA
: 表示元素包含文本数据。EMPTY
:表示元素没有任何内容。ANY
:表示元素可以包含任何内容。NOTATION
:用于声明元素的内容应该是一个特定的标记。
6.属性定义
6.1语法
在DTD中,可以使用 <!ATTLIST>
关键字来定义元素的属性。以下是DTD属性定义的语法:
<!ATTLIST element-name att-name type desc>
其中,各个部分的含义如下:
element-name
是需要定义属性的元素名称。att-name
是需要定义的属性名称。type
是属性的数据类型,可以是预定义的类型,也可以是自定义类型。(例如,CDATA、ID、IDREF、枚举类型等)desc
是属性的默认值。
6.2属性类型type
CDATA
:表示属性值可以包含任意字符数据。ID
:表示属性值必须是唯一的,并且可以用于标识元素。IDREF
:表示属性值必须引用文档中某个元素的ID属性的值。IDREFS
:表示属性值可以包含一个或多个IDREF值,多个值之间用空格分隔。NMTOKEN
:表示属性值必须是一个有效的XML名称。NMTOKENS
:表示属性值可以包含一个或多个NMTOKEN值,多个值之间用空格分隔。ENUMERATION
:表示属性值只可以是一组预定义的值,多个值之间用管道符|
分隔。- 自定义类型:可以使用DTD中的
<!ENTITY>
来定义自定义类型,通常是通过使用正则表达式或具体词汇进行定义。
通过对属性类型的定义,可以确保属性值的正确性和唯一性,并且可以限制属性值的范围,以确保XML文档结构的正确性和一致性。
6.3属性描述
当在DTD中定义元素属性时,可以使用 #REQUIRED 或 #IMPLIED 来指定该属性是否是必需的。这些关键字告诉XML解析器该如何处理属性,并且还提供了有用的元数据信息,以下是两种属性描述符的简要说明:
- #REQUIRED:如果指定了 #REQUIRED ,则意味着该属性是必需的。这意味着所有该元素的实例必须包含该属性。如果没有指定该属性或者该属性的值为空,则XML验证将失败。
- #IMPLIED:如果指定 #IMPLIED 则意味着该属性是可选的。这意味着该元素的实例可以包含该属性,也可以没有该属性。如果没有指定该属性,则XML验证将成功。
<!ATTLIST person name CDATA #REQUIRED age CDATA #IMPLIED city CDATA #IMPLIED gender (male|female) "male"> <!--其中,name属性是必需的,age和city属性是可选的,而gender属性是可选的,但默认值为"male"。-->
在DTD中,通过指定属性的必要性,可以确保XML文档的结构和内容的正确性,也有助于了解文档中元素及其属性之间的关系。
最后J2EE之XML(dtd篇)就到这里,祝大家在敲代码的路上一路通畅!