1. XML简介
什么是XML?
XML(可扩展标记语言)是一种标记语言,与HTML非常相似。XML被设计用来传输和存储数据,而HTML被设计用来显示数据。
XML与HTML的区别:
- XML的设计宗旨是传输数据,焦点是数据的内容
- HTML被设计用来显示数据,焦点是数据的外观
XML基本示例
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <site> <name>RUNOOB</name> <url>https://www.runoob.com</url> <logo>runoob-logo.png</logo> <desc>编程学习网站</desc> </site>
|
XML便签示例
1 2 3 4 5 6
| <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
|
XML的特点
- XML不会做任何事情:XML仅仅是包装在XML标签中的纯粹的信息,需要编写软件或程序来传送、接收和显示文档
- 没有预定义标签:HTML中使用的标签都是预定义的,而XML允许创作者定义自己的标签和文档结构
- 数据分离:通过XML,数据能够存储在独立的XML文件中,可以专注于使用HTML/CSS进行显示和布局
2. XML树结构
树形结构概念
XML文档形成了一种树结构,它从”根部”开始,然后扩展到”枝叶”。
XML声明和根元素
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
|
- 第一行是XML声明,定义XML的版本(1.0)和所使用的编码(UTF-8)
- ``描述文档的根元素
- 接下来4行描述根的4个子元素(to, from, heading, 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>
|
DOM概念
XML将数据组织成为一棵树,DOM通过解析XML文档,为XML文档在逻辑上建立一个树模型。树的节点是一个个的对象,通过操作这棵树和这些对象就可以完成对XML文档的操作。
3. XML语法规则
XML声明
1
| <?xml version="1.0" encoding="utf-8"?>
|
XML声明是文档的可选部分,如果存在需要放在文档的第一行。
根元素
XML文档必须有根元素,它是所有其他元素的父元素:
1 2 3 4 5
| <root> <child> <subchild>.....</subchild> </child> </root>
|
属性
元素可以包含属性,属性提供有关元素的附加信息:
1
| <person age="30" gender="male">John Doe</person>
|
单标签
XML允许使用单标签:
1 2 3
| <elementName attribute="value" />
<elementName></elementName>
|
标签大小写敏感
XML标签对大小写敏感:
1 2 3 4 5
| <Message>这是错误的</message>
<message>这是正确的</message>
|
正确嵌套
XML元素必须正确嵌套:
1 2 3 4 5
| <b><i>This text is bold and italic</i></b>
<b><i>This text is bold and italic</b></i>
|
属性值加引号
XML的属性值必须加引号:
1 2 3 4
| <note date="12/11/2007"> <to>Tove</to> <from>Jani</from> </note>
|
实体引用
在XML中,一些字符拥有特殊的意义,需要使用实体引用:
1
| <message>if salary < 1000 then</message>
|
5个预定义的实体引用:
<
→ <
(less than)
>
→ >
(greater than)
&
→ &
(ampersand)
'
→ '
(apostrophe)
"
→ "
(quotation mark)
空格保留
在XML中,空格会被保留(不像HTML会合并多个连续空格):
1 2 3 4 5 6 7
| <bookstore> <book> <title>xx xxx</title> <author>John Doe</author> <price>29.99</price> </book> </bookstore>
|
4. 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>
|
XML命名规则
XML元素必须遵循以下命名规则:
- 名称可以包含字母、数字以及其他字符
- 名称不能以数字或标点符号开始
- 名称不能以字母xml(或者XML、Xml等等)开始
- 名称不能包含空格
命名习惯
- 使名称具有描述性
- 名称应简短和简单
- 避免使用”-“、”.”、“:”字符
XML的可扩展性
1 2 3 4 5
| <note> <to>Tove</to> <from>Jani</from> <body>Don't forget me this weekend!</body> </note>
|
XML的优势之一,就是可以在不中断应用程序的情况下进行扩展。
5. XML属性
属性的作用
XML元素具有属性,类似HTML。属性提供有关元素的额外信息,通常提供不属于数据组成部分的信息。
属性必须加引号
属性值必须被引号包围,单引号和双引号均可使用:
1 2 3 4 5 6 7 8 9
| <person sex="female">
<person sex='female'>
<gangster name='George "Shotgun" Ziegler'>
<gangster name="George "Shotgun" Ziegler">
|
元素vs属性
1 2 3 4 5 6 7 8 9 10 11 12
| <person sex="female"> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
<person> <sex>female</sex> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
|
为什么要避免使用属性
使用属性会引起一些问题:
- 属性不能包含多个值(元素可以)
- 属性不能包含树结构(元素可以)
- 属性不容易扩展(为未来的变化)
- 属性难以阅读和维护
建议:
尽量使用元素来描述数据,仅仅使用属性来提供与数据无关的信息。
针对元数据的XML属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <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>
|
原则:
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
6. XML验证
形式良好的XML
“形式良好”的XML文档拥有正确的语法,必须遵循以下规则:
- XML文档必须有一个根元素
- XML元素都必须有一个关闭标签
- XML标签对大小写敏感
- XML元素必须被正确的嵌套
- XML属性值必须加引号
DTD验证
1
| <!DOCTYPE note SYSTEM "Note.dtd">
|
- DOCTYPE声明是对外部DTD文件的引用
- DTD的目的是定义XML文档的结构
- 通过DTD验证的XML是”合法”的XML
- W3C支持一种基于XML的DTD代替者,叫做XML Schema
XML验证的重要性
XML文档中的错误会终止XML应用程序。W3C的XML规范声明:如果XML文档存在错误,那么程序就不应当继续处理这个文档。
7. XML查看和显示
浏览器查看
在所有主流的浏览器中,均能够查看原始的XML文件。但不要指望XML文件会直接显示为HTML页面。
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
|
使用CSS格式化XML
通过使用CSS,您可以添加显示信息到XML文档中,但这不是常用的方法。
使用XSLT转换
XSLT是首选的XML样式表语言,可以把XML文档转换成HTML格式。
XML数据示例:
1 2 3 4 5 6 7 8 9 10 11 12
| <books> <book> <title>Effective Java</title> <author>Joshua Bloch</author> <price>59.99</price> </book> <book> <title>Clean Code</title> <author>Robert C. Martin</author> <price>49.99</price> </book> </books>
|
XSLT样式表示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My Book List</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Author</th> <th>Price</th> </tr> <xsl:apply-templates select="books/book"/> </table> </body> </html> </xsl:template>
<xsl:template match="books/book"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="author"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:template> </xsl:stylesheet>
|
XSLT元素说明:
xsl:stylesheet
:XSLT文件的根元素,指定XSLT的版本和命名空间
xsl:template
:定义模板,match属性指定模板匹配的XML元素
xsl:apply-templates
:调用其他模板,处理指定的XML元素
xsl:value-of
:提取XML元素中的文本内容并插入到输出中
总结
XML是一种强大的数据存储和传输格式,具有以下特点:
- 结构化:采用树形结构,层次清晰
- 可扩展:可以自定义标签和结构
- 平台无关:跨平台数据交换标准
- 严格语法:必须遵循严格的语法规则
- 可验证:可以通过DTD或Schema验证文档结构
- 可转换:可以通过XSLT转换为其他格式
XML在Web开发、数据交换、配置文件等领域都有广泛应用,是现代信息系统中不可或缺的技术标准。