XML,全称为可扩展标记语言(Extensible Markup Language),被广泛用于存储和传输数据。在深入研究XML的使用前,有必要先了解其基本概念以及常见的应用场景。
XML 是一种用于存储和传输数据的工具,而非编程语言。它主要用于描述数据和文本,与HTML类似,但XML比HTML更强大,因为它允许自定义标签。
XML 的主要作用是方便数据的共享、传输和平台无关性。例如,可以使用XML来在不同的系统之间交换数据,包括Internet上的业务数据交换。
XML(可扩展标记语言)是一种用于编码文档的标记语言,它允许定义各种数据类型,包括文本、数字、日期、时间、布尔值等。
以下是一个XML文档的例子:
<?xml version="1.0" encoding="UTF-8"?>
<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>
</bookstore>
一个XML文档由以下几个基本部分组成:
每个XML文档都以XML声明开始,这个声明通常包含XML版本和字符集信息。例如:
<?xml version="1.0" encoding="UTF-8"?>
在这个例子中,version
属性表示XML规范的版本,encoding
属性表示字符集。
XML元素是XML文档的主体,由开始标签、结束标签和包含在其中的内容(可能是其他元素、文本或混合内容)组成。例如:
<book>
<title>The Lord of the Rings</title>
<author>J. R. R. Tolkien</author>
</book>
在这个例子中,book
、title
和author
都是元素。
XML属性为元素提供附加信息,出现在开始标签内,以名称-值对的形式存在。例如:
<book id="123">
<title>The Lord of the Rings</title>
<author>J. R. R. Tolkien</author>
</book>
在这个例子中,id
是book
元素的属性,其值为"123"。
XML文本是元素的内容,位于开始标签和结束标签之间。例如:
<title>The Lord of the Rings</title>
在这个例子中,"The Lord of the Rings"就是文本。
XML注释用于在XML文档中添加注解,注释不会被XML解析器解析。例如:
<!-- This is a comment -->
以上就是XML的基本结构。需要注意的是,所有的XML元素必须有关闭标签,XML标签对大小写敏感,且XML文档必须正确嵌套。
为了避免命名冲突,XML支持命名空间的概念。这对于合并两个不同来源的XML文档特别有用。
例如:
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
在这个例子中,“h”和“f”是分别定义在"http://www.w3.org/TR/html4/"和"http://www.w3schools.com/furniture"上的命名空间。
XML架构是一个XML "应用"或"语言"的定义。最常见的是DTD(文档类型定义)和XSD(XML Schema Definition)。
例如,下面是一个简单的XSD(XML Schema Definition):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这个XSD定义了一个元素“note”,它包含四个字符串类型的子元素:to、from、heading和body。
有许多可用的XML解析器,例如:SAX, DOM 等。以及一些工具库如 JAXB, JDOM, Xerces, Xalan, etc.
例如,使用Python的xml.etree.ElementTree模块(类似于DOM)解析XML:
import xml.etree.ElementTree as ET
data = """
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
"""
root = ET.fromstring(data)
for book in root.findall('book'):
title = book.find('title').text
author = book.find('author').text
print(title, author)
包括XSLT、XPath、XQuery、SOAP等都是基于XML的技术。
例如,下面是一个简单的XSLT样式表,它将XML文档转换为HTML:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Bookstore</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Author</th>
</tr>
<xsl:for-each select="bookstore/book">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="author"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
假设我们有一个需求,需要创建一个XML文档来描述一个图书馆的书籍信息。每本书都有ISBN、标题、作者和出版年份等信息。
基于这个需求,我们可以逐步构建如下的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book isbn="978-3-16-148410-0">
<title>The Lord of the Rings</title>
<author>J. R. R. Tolkien</author>
<year>1954</year>
</book>
<book isbn="978-0-7432-4722-0">
<title>A Brief History of Time</title>
<author>Stephen Hawking</author>
<year>1988</year>
</book>
<!-- 更多的书籍信息... -->
</library>
在这个XML文档中,library
元素是根元素,它包含多个book
元素。每个book
元素都有一个属性isbn
,并包含三个子元素:title
、author
和year
。
XML是一种非常灵活的数据表示方式,可以轻松地添加、删除或修改元素和属性以满足各种需求。例如,如果我们需要为每本书添加价格信息,只需在book
元素内添加一个新的price
元素即可。
以上是关于XML的一些基础和高级知识。在深入了解这些内容后,可以开始尝试使用XML来存储和传输数据。