XML

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传输信息

George
John
Reminder
DObkfkssfsdfjs 


//上述这条便签,标签自定义,具有自我描述性,也未做任何事情
xml被设计用来结构化,存储以及传输信息

XML 仅仅是纯文本,没有任何行为

XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。

对 XML 最好的描述是:

XML 是独立于软件和硬件的信息传输工具。

XML 的用途

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。

xml把数据从HTML分离:
让HTML专注页面布局,需要数据时读取xml文档

xml简化数据共享:
xml数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法

xml简化数据传输
在不兼容的系统之间交换数据,数据统一xml文档(有其他统一个简化格式都行)

xml使页面在不同设备之间,平台系统之间传输有统一的数据格式,便于读取

xml树结构



George
John
Reminder
Don't forget the meeting!


eg.1


  Everyday Italian 
  Giada De Laurentiis 
  2005 
  30.00 


  Harry Potter 
  J K. Rowling 
  2005 
  29.99 


  Learning XML 
  Erik T. Ray 
  2003 
  39.95 



//书店有3类书,每本书包含名字 作者 价格 出版时间

xml语法规则

1. 所有 XML 元素都须有关闭标签

2. XML 标签对大小写敏感

3. XML 必须正确地嵌套

4. XML 文档必须有根元素

5. XML 的属性值须加引号

6. 实体引用
if salary < 1000 then

为了避免这个错误,请用实体引用来代替 "<" 字符:

if salary < 1000 then 

7. XML 中的注释
 

8. 在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个

9. XML 以 LF 存储换行(LF为换行符)

xml元素(与HTML类似)

xml命名规则

1. 名称可以含字母、数字以及其他的字符
2. 名称不能以数字或者标点符号开始
3. 名称不能以字符 “xml”(或者 XML、Xml)开始
4. 名称不能包含空格

有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

XML 元素是可扩展的

,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

//eg1


  08
  08
  2008

George
John
Reminder
Don't forget the meeting!


避免 XML 属性?

因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)
属性无法描述树结构(元素可以)
属性不易扩展(为未来的变化)
属性难以阅读和维护



最佳命名习惯

使名称具有描述性。使用下划线的名称也很不错。

名称应当比较简短,比如:,而不是:。

避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。

避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML验证

形式良好:

XML 文档必须有根元素
XML 文档必须有关闭标签
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性必须加引号

//遵守文档类型定义 (DTD) 的语法规则:
验证XML文档:



George
John
Reminder
Don't forget the meeting!
  

//DOCTYPE 声明是对外部 DTD 文件的引用

XML DTD 
//DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

  
  
  
  
]> 

XMl Schema:
W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:




  
    
    
    
    
  


 

使用 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="";
txt=txt+"Everyday Italian";
txt=txt+"Giada De Laurentiis";
txt=txt+"2005";
txt=txt+"";

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() 方法会返回包含所有  节点的数组。
    
HTML    
document.getElementById("to").innerHTML=

XML TO HTMl

通过解析器获取XML 然后写入HTML

XML应用程序

整个流程:

  1. 加载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文档对象
  1. 在任意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 + "
Title: " + title + "
Year: "+ year; document.getElementById("showCD").innerHTML=txt; }
  1. 添加导航脚本
function next() //到达最后一个元素不显示任何东西
{
    if (i < x.length-1)
    {
        i++;
        displayCD();
    }
}
function previous() //到达第一个元素后不显示任何东西
{
    if (i>0)
    {
        i--;
        displayCD();
    }
}


XML 命名空间(XML Namespaces)

  • XML 命名空间提供避免元素命名冲突的方法。

    1. 命名冲突(两个文档相同元素名,就会发生命名冲突)
    2. 使用前缀避免命名冲突(区分开来)
    // 
    //
    
    1. 使用命名空间(Namespaces)
    
    
    //为前缀赋予了一个与某个命名空间相关联的限定名称。 
    
    
    
    
    1. XML Namespace (xmlns) 属性

    语法:

    xmlns:namespace-prefix="namespaceURI"

    当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

    1. 默认的命名空间(Default Namespaces)

    语法:

    xmlns="namespaceURI"

```
//省去前缀的工作 //统一资源标识符(Uniform Resource Identifier (URI)) ```

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

不进行翻译 ,原文删除
所有 XML 文档中的文本均会被解析器解析。

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略

PCDATA 指的是被解析的字符数据(Parsed Character Data)
CDATA 部分由 "" 结束:

XML 编码


服务器上的 XML

XML 可在不安装任何 XML 软件的情况下在服务器端生成。

如需从服务器生成 XML 响应 - 只需简单地编写以下代码并在服务器上把它保存为一个 ASP 文件


<%
response.ContentType="text/xml"
response.Write("")
response.Write("")
response.Write("John")
response.Write("George")
response.Write("Don't forget the meeting!")
response.Write("")
%>


从数据库获取 XML

XML 可在不安装任何 XML 软件的情况下从数据库生成。

如需从服务器生成 XML 数据库响应,只需简单地编写以下代码,并把它在服务器上保存为 ASP 文件


在服务器上通过 XSLT 转换 XML

引用:

http://www.w3school.com.cn/xml/

你可能感兴趣的:(XML)