xml笔记
1、什么是xml、xml的作用
简介
在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据。而html使用的标签html语言规定好的,每个标签都有自己特定的功能。
xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使用的时候很不方便。有给xml语言定义了一些约束文档,这些约束文档就专门用来约束当前这个xml中能够书写的具体的标签以及属性等信息。
作用
- 存储和传输复杂的关系模型数据
- 作为配置文件存在,xml中主要配置的一些具有复杂的层级关系的数据,Properties文件中主要配置的一些key和value这样的数据。
- 主要用于不同语言之间的数据交换
为提高系统的灵活性,它所启动的模块通常由其配置文件决定
例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。
<soft>
<A>
<A1></A1>
<A2></A2>
</A>
<B>
<B1></B1>
<B2></B2>
</B>
</soft>
xml的语法
文档声明
XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<?属性 版本号 编码?>
语法规则
- XML 文档必须有根元素
XML 必须包含根元素,它是所有其他元素的父元素,比如以下实例中 root 就是根元素:
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
- 所有的 XML 元素都必须有一个关闭标签
在 HTML 中,某些元素不必有一个关闭标签
在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签
- XML 标签对大小写敏感
XML 标签对大小写敏感。标签
与标签 是不同的。
必须使用相同的大小写来编写打开标签和关闭标签
- XML 必须正确嵌套
- XML 属性值必须加引号
与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。
在 XML 中,XML 的属性值必须加引号。
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
- 实体引用
在 XML 中,一些字符拥有特殊的意义。
如果您把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary < 1000 then</message>
在 XML 中,有 5 个预定义的实体引用
引用 | 实体 | 描述 |
---|---|---|
< | < | less than |
> | > | greater than |
& | & | ampersand |
' | ' | apostrophe |
" | " | quotation mark |
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
你也可以自己创建实体引用
- XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似。
<!-- This is a comment -->
- 在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个,在 XML 中,文档中的空格不会被删减。
- XML 以 LF 存储换行
在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
在旧的 Mac 系统中,使用 CR 来存储新行。
XML 以 LF 存储换行。
- XML 命名规则
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
- 最佳命名习惯
- 使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。
- 名称应简短和简单,比如:<book_title>,而不是:<the_title_of_the_book>。
- 避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。
- 避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
- 避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
- XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。
- 在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。
XML 属性
XML元素具有属性,类似 HTML。
属性(Attribute)提供有关元素的额外信息。
- 属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:
<file type="gif">computer.gif</file>
- XML 属性必须加引号
属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 元素可以这样写:
或者这样也可以:
<person sex='female'>
如果属性值本身包含双引号,您可以使用单引号,就像这个实例:
<gangster name='George "Shotgun" Ziegler'>
或者您可以使用字符实体:
<gangster name="George "Shotgun" Ziegler">
- 没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
- 针对元数据的 XML 属性
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
XML 验证(DTD、Schema)
拥有正确语法的 XML 被称为"形式良好"的 XML。
通过 DTD 验证的XML是"合法"的 XML。
XML 错误会终止您的程序
XML 文档中的错误会终止您的 XML 应用程序。
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。
如果使用 HTML,创建包含大量错误的文档是有可能的(比如您忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。
使用 XML 时,这种情况不应当存在。