XML|青训营笔记

148 阅读6分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

XML

1、概念:可扩展标记语言

xml是W3C推出的数据传输格式

标记:标签组成的语言

可扩展:标签都是自定义的。

2、功能:

  • 配置文件:config.xml
  • 在网络中传输
  • 存储数据,充当小型数据库
  • 最主要的功能就是数据传输(数据传输就是将数据由一个服务器给到另一个服务器,或者由一个网站给到另一个网站,将数据进行了两者之间的一种交换)
  • xml主要具体是在规范数据格式,是数据具有结构性,易读易处理
  • XML 是不作为的。XML 仅仅是纯文本,XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。不过,能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。

3、xml与html的区别:

  1. xml标签都是自定义,但是在写标签名的时候一定要有含义,html标签是预定义
  2. xml的语法严格,html语法松散(很难写错),xml必须是成对标签
  3. xml是传输和存储数据的,html是展示数据的

4、语法:

  1. 基本语法:

    • xml文档后缀名.xml
    • xml第一行必须定义为文档声明
    • xml文档中有且仅有一个根标签/结点,根节点就是其他所有节点的父级节点
    • 属性值必需使用引号(单双都可)括起来
    • 标签必须正确关闭
    • xml标签名区分大小写
    • 标签不能交叉
    • 特殊字符如< >这些要使用实体 &lt;表示小于号,不然和标签无法区分

5、组成部分:

  1. 文档声明:不强制要求,可有可无,但是建议写

    • 格式: 尖括号和?,?和xml之间都不能有空格

    • 属性列表:

      1. version:版本号,必须的属性

      2. encoding:编码方式,告知解析引擎当前文档使用的字符集,默认值

      3. standalone(了解):是否独立

        取值:yes:不依赖其他文件 no:依赖其他文件

2.标签:标签是自定义的

规则:

  • 名称可以包含字母,数字以及其他字符

  • 名称不能以数字或者标点符号开始

  • 名称不能以字母xml(或者xml,XML,等待)开始

  • 名称不能包含空格

  • 最佳命名习惯

    使名称具有描述性。使用下划线的名称也很不错。

    名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。

    避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。

    避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

    避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

    XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

    非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。

3.属性(引号内部的内容,属性值须加引号):

一个标签可以有多个属性,属性的值必须用引号引起来

命名规则:数字字母下划线,数字不能开头

属性就是标签自身的一些额外信息

id属性值唯一

避免 XML 属性?

因使用属性而引起的一些问题:

  • 属性无法包含多重的值(元素可以)
  • 属性无法描述树结构(元素可以)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

4.文本:

CDATA区:在该区域的数据或被原样展示

格式:

5.元素:

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore> 

在上例中, 和 都拥有元素内容,因为它们包含了其他元素。 只有文本内容,因为它仅包含文本。

在上例中,只有 元素拥有属性 (category="CHILDREN")。

7、XML 元素 vs. 属性

例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person><person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

6、约束:规定xml文档的书写规则

作为框架的使用者(程序员):

  • 能够在xml中引入约束文档
  • 能够简单读懂约束文档

分类:

  • DTD:一种简单的约束技术(无法约束标签内部具体的定义内容,只能限制一个固定框架)
  • Schema:一种复杂的约束技术

DTD:

引入dtd文档到xml文档中

  • 内部dtd:将约束规则定义在xml文档中
  • 外部dtd:将约束的规则定义在外部的dtd文件中

Schema:

引入:

  1. 填写xml文档的根元素

  2. 引入xml前缀,xmlns:xsi="www.itcast.cn/xml student.xsd"

  3. 映入xsd文件命名空间,xsi:schemaLocation="www.itcast.cn/xml student.xsd"

  4. 为每一个xsd约束声明一个前缀,作为标识 xmls="www.itcast.cn/xml"

    <student     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://www.itcast.cn/xml"
             xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"></student>
    

7、解析:操作xml文档,将文档中的数据读取到内存中

操作xml文档:

  1. 解析(读取):将文档中的数据读取到内存中
  2. 写入:将内存中的数据保存到xml文档中,持久化的存储

解析xml的方式:

1、DOM思想:将标记语言文档一次性加载进内存,在内存中形成一颗dom树

  • 优点:操作方便,可以对文档进行CRUD(增删改查)的所有操作
  • 缺点:消耗内存

2、SAX思想:逐行读取,基于事件驱动的

  • 优点:不占内存,因为每次在内测中只加载一行
  • 缺点:只能读取,不能增删改

注:在服务器中一般使用DOM思想,在移动端一般使用SAX思想

3、xml常见的解析器:

  • JAXP:sun公司提供的解析器,支持dom和sax两种思想(性能低,一般使用,了解即可)
  • DOM4J:非常优秀的解析器
  • jsoup:
  • PULL:Android操作系统内置的解析器,sax方式的

8、在 XML 中,有 5 个预定义的实体引用:

<<小于
大于
&&和号
''单引号
""引号

注释: 在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。