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构成可以分为两层的树结构:
根元素:描述整篇文档
子元素:描述根的几个子元素((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 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 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 元素具备有属性。
我尚没有见到过元素内容与文本内容兼备的元素
疑问点?
属性与子元素到底有什么差别呢?或者说什么时候用属性比较合适,而什么时候用子元素比较合适?
结论:
尽可能的使用子元素,除非该内容用于标识数据的数据,而不是数据本身。
同一数据的不同表示实例:
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>
|
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>
|
为什么尽可能避免使用属性?
- 属性没有层级结构,不能够标识多重值,元素可以;
- 属性无法描述为树形结构,元素可以;
- 属性无法动态扩展,不利于未来变化;
- 属性不好阅读。
不好的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>
|