XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准。
如下例子:
Tove
Jani
Reminder
Don't forget me this weekend!
上面实例中的标签没有在任何 XML 标准中定义过(比如 和 )。这些标签是由 XML 文档的创作者发明的。这是因为 XML 语言没有预定义的标签。HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 等等)。XML 允许创作者定义自己的标签和自己的文档结构。
XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
XML 文档必须有根元素
所有的 XML 元素都必须有一个关闭标签
XML 标签对大小写敏感
XML 必须正确嵌套
XML 属性值必须加引号
实体引用
引用 | 实体 | 含义 |
---|---|---|
< | < | less than |
> | > | greater than |
& | & | ampersand |
' | ’ | apostrophe |
" | " | quotation mark |
在 XML 中,空格会被保留
XML 元素必须遵循以下命名规则:
可使用任何名称,没有保留的字词。
因使用属性而引起的一些问题:
属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
不要做这样的蠢事(这不是 XML 应该被使用的方式):
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:
Tove
Jani
Reminder
Don't forget me this weekend!
Jani
Tove
Re: Reminder
I will not
上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
XML 文档中的错误会终止您的 XML 应用程序。
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。
如果使用 HTML,创建包含大量错误的文档是有可能的(比如您忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。
使用 XML 时,这种情况不应当存在。
可以通过XML DTD或者XML Schema来验证XML
XML 文档不会携带有关如何显示数据的信息。
由于 XML 标签由 XML 文档的作者"发明",浏览器无法确定像 在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。 在下面的章节,我们会了解几个有关这个显示问题的解决方案,其中会使用 CSS、XSLT 和 JavaScript。 引入css样式表: 使用 CSS 格式化 XML 不是常用的方法。W3C 推荐使用 XSLT. XSLT 是首选的 XML 样式表语言。 XSLT(eXtensible Stylesheet Language Transformations)远比 CSS 更加完善。 XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML: 当浏览器读取 XML 文件时,XSLT 转换是由浏览器完成的。在使用 XSLT 来转换 XML 时,不同的浏览器可能会产生不同结果。为了减少这种问题,可以在服务器上进行 XSLT 转换。 XMLHttpRequest 对象用于在后台与服务器交换数据。 XMLHttpRequest 对象是开发者的梦想,因为您能够: 所有现代浏览器(IE7+、Firefox、Chrome、Safari 和 Opera)都有内建的 XMLHttpRequest 对象。 创建 XMLHttpRequest 对象的语法: 旧版本的Internet Explorer(IE5和IE6)中使用 ActiveX 对象: XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。 解析 XML 文档:下面的代码片段把 XML 文档解析到 XML DOM 对象中: 解析 XML 字符串:下面的代码片段把 XML 字符串解析到 XML DOM 对象中: 注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。 出于安全方面的原因,现代的浏览器不允许跨域的访问。这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。 DOM(Document Object Model 文档对象模型)定义了访问和操作文档的标准方法。 XML DOM(XML Document Object Model)定义了访问和操作 XML 文档的标准方法。 XML DOM 把 XML 文档作为树结构来查看。 所有元素可以通过 DOM 树来访问。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是加载一个 XML 文件 - 跨浏览器实例 下面的实例把 XML 文档(“note.xml”)解析到 XML DOM 对象中,然后通过 JavaScript 提取一些信息: 加载一个 XML 字符串 - 跨浏览器实例 下面的实例把 XML 字符串解析到 XML DOM 对象中,然后通过 JavaScript 提取一些信息: 术语 CDATA 是不应该由 XML 解析器解析的文本数据。 像 “<” 和 “&” 字符在 XML 元素中都是非法的: “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。 “&” 会产生错误,因为解析器会把该字符解释为字符实体的开始。 某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。 CDATA 部分由 “” 结束: 在上面的实例中,解析器会忽略 CDATA 部分中的所有内容。 关于 CDATA 部分的注释: CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。 标记 CDATA 部分结尾的 “]]>” 不能包含空格或换行。 XML 文档可以包含非 ASCII 字符,比如挪威语 æ ø å,或者法语 ê è é。为了避免错误,需要规定 XML 编码,或者将 XML 文件存为 Unicode。 通过 ASP 生成 XML XML 可在不安装任何 XML 软件的情况下在服务器端生成。 如需从服务器生成 XML 响应 - 只需简单地编写以下代码并在 Web 服务器上把它保存为一个 ASP 文件: 请注意,此响应的内容类型必须设置为 “text/xml”。 通过 PHP 生成 XML 如需使用 PHP 从服务器上生成 XML 响应,请使用下面的代码: 请注意,响应头部的内容类型必须设置为 “text/xml”。 从数据库生成 XML XML 可在不安装任何 XML 软件的情况下从数据库生成。 如需从服务器生成 XML 数据库响应,只需简单地编写以下代码,并把它在 Web 服务器上保存为 ASP 文件: 在服务器上通过 XSLT 转换 XML 下面的 ASP 代码在服务器上把 XML 文件转换为 XHTML: 实例解释: 通过 ASP 把 XML 保存为文件 这个 ASP 实例会创建一个简单的 XML 文档,并把该文档保存到服务器上: 它是什么?XML 数据岛是嵌入到 HTML 页面中的 XML 数据。 为什么要避免使用它?XML 数据岛只在 Internet Explorer 浏览器中有效。 用什么代替它?您应当在 HTML 中使用 JavaScript 和 XML DOM 来解析并显示 XML。 实例: 把 XML 文档绑定到 HTML 文档中的一个 标签。id 属性定义数据岛的标识符,而 src 属性指向 XML 文件: 本实例只适用于 IE 浏览器 标签允许 datafld 属性引用要显示的 XML 元素。在这个实例中,要引用的是 “ARTIST” 和 “TITLE”。当读取 XML 时,会为每个 元素创建相应的表格行。 它是什么?Internet Explorer 5 引入了行为。行为是通过使用 CSS 样式向 XML (或 HTML )元素添加行为的一种方法。 为什么要避免使用它?只有 Internet Explorer 支持 behavior 属性。 使用什么代替它?使用 JavaScript 和 XML DOM(或 HTML DOM)来代替它。 实例 - 鼠标悬停突出: 下面的 HTML 文件中的
这样一个标签究竟描述一个 HTML 表格还是一个餐桌。
使用 CSS 显示 XML
使用 XSLT 显示 XML
使用JavaScript显示XML
XMLHttpRequest 对象
创建一个 XMLHttpRequest 对象
xmlhttp=new XMLHttpRequest();
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
XML解析器
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
txt="
XML DOM
W3Schools Internal Note
From:
Message:
W3Schools Internal Note
From:
Message:
在 HTML 页面中显示 XML 数据
点击CD时显示专辑信息
CDATA - (未解析)字符数据
XML编码
服务器上的 XML
<%
response.ContentType="text/xml"
response.Write("")
response.Write("
";
echo "
<%
response.ContentType = "text/xml"
set conn=Server.CreateObject("ADODB.Connection")
conn.provider="Microsoft.Jet.OLEDB.4.0;"
conn.open server.mappath("/db/database.mdb")
sql="select fname,lname from tblGuestBook"
set rs=Conn.Execute(sql)
response.write("")
response.write("
<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("simple.xml"))
'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("simple.xsl"))
'Transform file
Response.Write(xml.transformNode(xsl))
%>
<%
text="
XML应该避免的技术
Internet Explorer - XML 数据岛
标签的 datasrc 属性把 HTML 表格绑定到 XML 数据岛。
Internet Explorer - 行为
Mouse over me!!!