XML
xml只可扩展标记语言
~~xml被设计用来传输和存储数据~~
xml的设计宗旨是传输数据,而不是显示数据
xml标签未自定义,需要自定义
xml具有自我描述性
验证器的使用
dtd: documention type define
xs: XML Schema
xslt: extensible stylesheet language transformation
XML Namespace (xmlns)
统一资源标识符(Uniform Resource Identifier (URI))
统一资源标识符是一串可以标识因特网资源的字符。最常用的
URI 是用来标示因特网域名地址的统一资源定位器(URL)。
另一个不那么常用的 URI 是统一资源命名(URN)。在我们的例子中,我们仅使用 URL。
xml和HTML的差异
为不同目的而设计
xml被设计为传输和存储数据,其焦点是数据的内容
HTML被设计用来显示数据,其焦点是数据的外观
HTML显示信息,XML传输信息
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>DObkfkssfsdfjs </body>
</note>
//上述这条便签,标签自定义,具有自我描述性,也未做任何事情
xml被设计用来结构化,存储以及传输信息
XML 仅仅是纯文本,没有任何行为
XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。
对 XML 最好的描述是:
XML 是独立于软件和硬件的信息传输工具。
XML 的用途
XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
xml把数据从HTML分离:
让HTML专注页面布局,需要数据时读取xml文档
xml简化数据共享:
xml数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法
xml简化数据传输
在不兼容的系统之间交换数据,数据统一xml文档(有其他统一个简化格式都行)
xml使页面在不同设备之间,平台系统之间传输有统一的数据格式,便于读取
xml树结构
<?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>
eg.1
<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>
//书店有3类书,每本书包含名字 作者 价格 出版时间
xml语法规则
1. 所有 XML 元素都须有关闭标签
2. XML 标签对大小写敏感
3. XML 必须正确地嵌套
4. XML 文档必须有根元素
5. XML 的属性值须加引号
6. 实体引用
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary < 1000 then</message>
7. XML 中的注释
<!-- This is a comment -->
8. 在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个
9. XML 以 LF 存储换行(LF为换行符)
xml元素(与HTML类似)
xml命名规则
1. 名称可以含字母、数字以及其他的字符
2. 名称不能以数字或者标点符号开始
3. 名称不能以字符 “xml”(或者 XML、Xml)开始
4. 名称不能包含空格
有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
XML 元素是可扩展的
,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。
//eg1
<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 属性?
因使用属性而引起的一些问题:
属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护
最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错。
名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。
在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
XML验证
形式良好:
XML 文档必须有根元素
XML 文档必须有关闭标签
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性必须加引号
//遵守文档类型定义 (DTD) 的语法规则:
验证XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
//DOCTYPE 声明是对外部 DTD 文件的引用
XML DTD
//DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
XMl Schema:
W3C 支持一种基于 XML 的 DTD 代替者,它名为 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>
使用 CSS 显示 XML
使用 XSLT 显示 XML(推荐)
-
XSLT是首选的XML样式表语言
-
使用 XSLT 的方法之一是在浏览器显示 XML 文件之前,先把它转换为 HTML,正如以下的这些例子演示的那样:
-
在服务器上通过 XSLT 转换 XML(为何在服务器上)
不同浏览器读取XML文件可能会产生不同的结果
XMLHttpRequest 对象
XMLHttpRequest 对象用于在后台与服务器交换数据(不重新加载,异步请求接收)。
- 创建XMLHttpRequest
xmlhttp=new XMLHttpRequest(); //js code
new ActiveXObject("Microsoft.XMLDOM");
new ActiveXObject("Microsoft.XMLHTTP");
XML解析器
- 解析XML文档
xmlhttp=new XMLHttpRequest(); //js code
new ActiveXObject("Microsoft.XMLDOM");
new ActiveXObject("Microsoft.XMLHTTP");
- 解析XML字符串
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");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
}
- 跨域访问
出于安全方面的原因,现代的浏览器不允许跨域的访问。
这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。
XML DOM
xmlDoc nodeValue
//xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue
//这是因为 getElementsByTagName() 方法会返回包含所有 <from> 节点的数组。
HTML
document.getElementById("to").innerHTML=
XML TO HTMl
通过解析器获取XML 然后写入HTML
XML应用程序
整个流程:
- 加载XML文档
//获得XMLHttpRequest对象
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","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML //获得xml文档对象
- 在任意HTML元素中显示XML文档
x= xmlDoc.getElementsByTagName("CD")
i = 0
function displayCD()
{ //获得artist title year 的值
artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);
//innerHTML的内容
txt="Artist: " + artist + "<br />Title: " + title + "<br />Year: "+ year;
document.getElementById("showCD").innerHTML=txt;
}
- 添加导航脚本
function next() //到达最后一个元素不显示任何东西
{
if (i < x.length-1)
{
i++;
displayCD();
}
}
function previous() //到达第一个元素后不显示任何东西
{
if (i>0)
{
i--;
displayCD();
}
}
XML 命名空间(XML Namespaces)
-
XML 命名空间提供避免元素命名冲突的方法。
- 命名冲突(两个文档相同元素名,就会发生命名冲突)
- 使用前缀避免命名冲突(区分开来)
//<h:table></h:table> //<f:table></f:table>- 使用命名空间(Namespaces)
<h:table xmlns:h="http://www.w3.org/TR/html4/"> <f:table xmlns:f="http://www.w3school.com.cn/furniture"> //为前缀赋予了一个与某个命名空间相关联的限定名称。- XML Namespace (xmlns) 属性
语法:
xmlns:namespace-prefix="namespaceURI"
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
- 默认的命名空间(Default Namespaces)
语法:
xmlns="namespaceURI"
```
<table xmlns="http://www.w3.org/TR/html4/">
<table xmlns="http://www.w3school.com.cn/furniture">
//省去前缀的工作
//统一资源标识符(Uniform Resource Identifier (URI))
```
CDATA
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
不进行翻译 ,原文删除
所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略
PCDATA 指的是被解析的字符数据(Parsed Character Data)
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
XML 编码
<?xml version="1.0" encoding="UTF-8"?>
服务器上的 XML
XML 可在不安装任何 XML 软件的情况下在服务器端生成。
如需从服务器生成 XML 响应 - 只需简单地编写以下代码并在服务器上把它保存为一个 ASP 文件
<%
response.ContentType="text/xml"
response.Write("<?xml version='1.0' encoding='ISO-8859-1'?>")
response.Write("<note>")
response.Write("<from>John</from>")
response.Write("<to>George</to>")
response.Write("<message>Don't forget the meeting!</message>")
response.Write("</note>")
%>
从数据库获取 XML
XML 可在不安装任何 XML 软件的情况下从数据库生成。
如需从服务器生成 XML 数据库响应,只需简单地编写以下代码,并把它在服务器上保存为 ASP 文件
在服务器上通过 XSLT 转换 XML
引用:







网友评论