Summary for developers
XML (eXtensible Markup Language)是W3C 的推荐标准,用于传输和存储数据,可存储、可搜索和可共享。使用 XML 你需要自行定义标签,XML具有自我描述性,可以在不中断应用程序的情况下进行扩展,且独立于软件和硬件。
XML 的用途如下:
把数据从 HTML 分离
将数据能够存储在独立的 XML 文件中,使用HTML/CSS 进行显示和布局。
简化数据共享
XML 数据以纯文本格式进行存储,提供了一种独立于软件和硬件的数据存储方法。
简化数据传输
以 XML 在互联网上的不兼容系统之间交换数据。
简化平台变更
XML 数据以文本格式存储,在不损失数据的情况下,更容易扩展或升级。
创建新的互联网语言
XHTML、RSS 等。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
<!-- XML declaration -->
<?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>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
<
代表<
, >
代表>
, &
代表&
, '
代表’
, "
代表"
)XML DTD:通过 DTD 验证的XML是合法(形式良好)的 XML。
验证 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML Schema
<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>
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。一个元素可以包含:文本、属性或其他元素。
XML 元素的名称应具有自我描述性,简单,避免 - . :
等字符。XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素,可以使用数据库的命名规则来命名 XML 文档中的元素。
XML的元素命名规则具体如下:
属性(Attribute)提供有关元素的额外信息。属性值必须被引号包围,不过单引号和双引号均可使用。
属性不能包含多个值,不能包含树结构(元素可以),不易扩展。因此使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。
最佳实践:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。
我们可以使用 CSS 或者 XSLT (W3C 推荐)来格式化 XML 文档。
XSLT(eXtensible Stylesheet Language Transformations )是首选的 XML 样式表语言,它会在浏览器显示 XML 文件之前,先把它转换为 HTML 格式。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
所有现代浏览器都有内建的 XML 解析器
XML 解析器把 XML 文档转换为 XML DOM 对象。
现代的浏览器不允许跨域访问
网页以及它试图加载的 XML 文件,必须位于相同服务器(安全考虑)。
XML DOM
定义了访问和操作 XML 文档的标准方法。XML DOM 把 XML 文档作为树结构来查看。访问 XML DOM 对象并取回数据。
创建、删除元素,获取元素或改变元素的值;创建新的属性,获取属性的值。
在 HTML 页面中显示 XML 数据
// Create a XMLHttpRequest Object
xmlhttp = new XMLHttpRequest();
// Parse XML Document
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
// Parse XML String
txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";
if (window.DOMParser) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(txt,"text/xml");
}
XML命名空间
使用名称前缀避免元素命名冲突。命名空间是在元素的开始标签的 xmlns 属性中定义的。
声明语法:xmlns:*前缀*="*URI*"
。
参考资料:XML教程