0%

XML Simple Research

Source: w3c

XML定义

xml就是一种数据的存储格式。

  • XML 指可扩展标记语言(eXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

XML的用处

用于 结构化,存储及传输数据,所以XML就是一种序列化数据表现形式,也可以认为就是数据内容,XML就是纯文本也是对的。

XML是一种树结构

XML文件与HTML文件结构很相似,都是利用tag进行标识的,也都是树形结构

XML实例:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

上面的xml构成可以分为两层的树结构:
根元素:描述整篇文档

1
<note>

子元素:描述根的几个子元素((to, from, heading 以及 body))

1
2
3
4
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>

根元素结尾:

1
</note>

从树的结构出发我们不难得出:

  1. 所有元素均可以拥有子元素
  2. 相同层级的元素可以称为兄弟姐妹
  3. 元素拥有属性与文本;

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

结构示意图:一本书的结构

XML语法格式

不赘述

XML元素包括什么

  1. 内容:文本内容或元素内容
  2. 属性

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

可以看到上面的例子中:bookstore 与 book 元素仅包含有元素内容,而 title等元素仅包含有文本内容; book 元素具备有属性。

我尚没有见到过元素内容与文本内容兼备的元素

疑问点?

属性与子元素到底有什么差别呢?或者说什么时候用属性比较合适,而什么时候用子元素比较合适?

结论:

尽可能的使用子元素,除非该内容用于标识数据的数据,而不是数据本身。

同一数据的不同表示实例:

  • 第一个例子中使用了 date 属性:
1
2
3
4
5
6
<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
  • 第二个例子中使用了 date 元素:
1
2
3
4
5
6
7
<note>
<date>08/08/2008</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
  • 第三个例子中使用了扩展的 date 元素(这是我的最爱):
1
2
3
4
5
6
7
8
9
10
11
<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

为什么尽可能避免使用属性?

  1. 属性没有层级结构,不能够标识多重值,元素可以;
  2. 属性无法描述为树形结构,元素可以;
  3. 属性无法动态扩展,不利于未来变化;
  4. 属性不好阅读。

不好的XML实例:

1
2
3
4
<note day="08" month="08" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
</note>