XML

Posted A_山水子农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML相关的知识,希望对你有一定的参考价值。

XML基础

一、XML简介

1、什么是 XML?

    XML 指可扩展标记语言(EXtensible Markup Language

    XML 是一种标记语言,很类似 html

    XML 的设计宗旨是传输数据,而非显示数据

    XML 标签没有被预定义。您需要自行定义标签。

    XML 被设计为具有自我描述性。

    XML W3C的推荐标准

    XML HTML的主要差异

    XML 不是 HTML的替代。

2XMLHTML为不同的目的而设计:

   XML 被设计为传输和存储数据,其焦点是数据的内容。

   HTML 被设计用来显示数据,其焦点是数据的外观。

   HTML 旨在显示信息,而 XML旨在传输信息。

3、没有任何行为的 XML

   XML 是不作为的。

   也许这有点难以理解,但是 XML 不会做任何事情。XML被设计用来结构化、存储以及传输信息。

4XML仅仅是纯文本

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

不过,能够读懂 XML 的应用程序可以有针对性地处理XML 的标签。标签的功能性意义依赖于应用程序的特性。


二、用途

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

1XML把数据从 HTML分离

    如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑HTML

    通过 XML,数据能够存储在独立的XML 文件中。这样你就可以专注于使用HTML 进行布局和显示,并确保修改底层数据不再需要对HTML 进行任何的改变。

通过使用几行 javascript,你就可以读取一个外部XML 文件,然后更新HTML 中的数据内容。

2XML简化数据共享

    在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。

XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。

3XML简化数据传输

    通过 XML,可以在不兼容的系统之间轻松地交换数据。

    对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。

    由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。

4XML简化平台的变更

    升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。

    XML 数据以文本格式存储。这使得 XML在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。

5XML使您的数据更有用

    由于 XML 独立于硬件、软件以及应用程序,XML使您的数据更可用,也更有用。

不同的应用程序都能够访问您的数据,不仅仅在 HTML 页中,也可以从XML 数据源中进行访问。

    通过 XML,您的数据可供各种阅读设备使用(手持的计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。

6XML用于创建新的 Internet语言

     很多新的 Internet 语言是通过XML 创建的:

     其中的例子包括:

        XHTML - 最新的 HTML版本

        WSDL - 用于描述可用的 web service

        WAP WML -用于手持设备的标记语言

        RSS - 用于 RSS feed的语言

        RDF OWL -用于描述资源和本体

        SMIL - 用于描述针针对 web的多媒体

 

三、树结构

     XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。

     XML 文档形成一种树结构

     XML 文档必须包含根元素。该元素是所有其他元素的父元素。

     XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

四、语法

    XML 的语法规则很简单,且很有逻辑。这些规则很容易学习,也很容易使用。

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

2、XML 标签对大小写敏感

XML 元素使用 XML标签进行定义。XML标签对大小写敏感。在 XML中,标签 <Letter>与标签 <letter>是不同的。 必须使用相同的大小写来编写打开标签和关闭标签:

3、XML 必须正确地嵌套

4、XML 文档必须有根元素

   XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。

5XML的属性值须加引号

   与 HTML 类似,XML也可拥有属性(名称/值的对)。在XML 中,XML的属性值须加引号。

6、实体引用

XML 中,一些字符拥有特殊的意义。如果你把字符"<" 放在XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

<

<

小于

>

>

大于

&

&

和号

'

'

单引号

"

"

引号

注释: XML 中,只有字符 "<""&"确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

7XML中的注释

     在 XML 中编写注释的语法与HTML 的语法很相似:

     <!-- This is a comment -->

8、在 XML中,空格会被保留

    HTML 会把多个连续的空格字符裁减(合并)为一个:

    HTML: Hello           my name is David.

    输出: Hello my name is David.

XML 中,文档中的空格不会被删节。

9XMLLF存储换行

Windows 应用程序中,换行通常以一对字符来存储:回车符(CR) 和换行符(LF)。这对字符与打字机设置新行的动作有相似之处。在Unix 应用程序中,新行以LF 字符存储。而Macintosh 应用程序使用CR 来存储新行。

 

五、元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

1XML命名规则

XML 元素必须遵循以下命名规则:

名称可以含字母、数字以及其他的字符

名称不能以数字或者标点符号开始

名称不能以字符 “xml”(或者XMLXml)开始

名称不能包含空格

可使用任何名称,没有保留的字词。

2XML元素是可扩展的

XML 元素是可扩展,以携带更多的信息。

 

六、属性

   XML 元素可以在开始标签中包含属性,类似 HTML。属性(Attribute) 提供关于元素的额外(附加)信息。

1XML属性必须加引号

    属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person标签可以这样写:

   <person sex="female">

   或者这样也可以:

   <person sex='female'>

   注释:如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:

   <gangster name='George "Shotgun" Ziegler'>

   或者可以使用实体引用:

   <gangster name="George "Shotgun" Ziegler">

2、避免 XML属性?

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

   属性无法包含多重的值(元素可以)

   属性无法描述树结构(元素可以)

   属性不易扩展(为未来的变化)

   属性难以阅读和维护

   请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

 

七、验证

拥有正确语法的 XML 被称为“形式良好”的XML。通过DTD 验证的XML 是“合法”的XML

1、形式良好的 XML文档

   “形式良好”或“结构良好”的 XML 文档拥有正确的语法。

   “形式良好”(Well Formed)的XML 文档会遵守前几章介绍过的XML 语法规则:

       XML 文档必须有根元素

       XML 文档必须有关闭标签

       XML 标签对大小写敏感

       XML 元素必须被正确的嵌套

       XML 属性必须加引号

2、验证 XML文档

    合法的 XML 文档是“形式良好”的XML 文档,同样遵守文档类型定义(DTD) 的语法规则:

<?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 JavaScript

一、XMLHttpRequest

1XMLHttpRequest对象用于在后台与服务器交换数据。XMLHttpRequest对象是开发者的梦想,因为您能够:

    在不重新加载页面的情况下更新网页

    在页面已加载后从服务器请求数据

    在页面已加载后从服务器接收数据

在后台向服务器发送数据

2、创建 XMLHttpRequest对象

    所有现代浏览器 (IE7+FirefoxChromeSafari以及 Opera)都内建了 XMLHttpRequest对象。

    通过一行简单的 JavaScript 代码,我们就可以创建XMLHttpRequest 对象。

创建 XMLHttpRequest 对象的语法:

    xmlhttp=new XMLHttpRequest();

老版本的 Internet Explorer IE5IE6)使用ActiveX 对象:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 
xmlhttp=null;
if (window.XMLHttpRequest)
  {// code for all new browsers
  xmlhttp=new XMLHttpRequest();
  }
else if (window.ActiveXObject)
  {// code for IE5 and IE6
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 

二、XML解析器

1、解析 XML文档

   下面的代码片段把 XML 文档解析到XML DOM 对象中:

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; 

其他方法 1:通过微软的XML 解析器来加载XML

   微软的 XML 解析器内建于Internet Explorer 5 以及更高的版本中。下面的JavaScript 片段把一个XML 文档载入解析器中:

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("note.xml");

   上面代码的第一个行创建一个空的微软 XML 文档对象。

   第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。

   第三行告知解析器加载名为 "note.xml" XML 文档。

其他方法 2:在Firefox 及其他浏览器中的XML 解析器

    下面的 JavaScript 片段把XML 文档("note.xml") 载入解析器:

var xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("note.xml");

    上面代码的第一个行创建一个空的 XML 文档对象。

    第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。

    第三行告知解析器加载名为 "note.xml" XML 文档。

2、解析 XML字符串

下面的 JavaScript 代码片段把XML 字符串解析到XML DOM 对象中(把字符串txt 载入解析器):

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);
  }

注释:Internet Explorer 使用loadXML() 方法来解析XML 字符串,而其他浏览器使用DOMParser 对象。

注释:loadXML() 方法用于加载字符串(文本),load()用于加载文件。

 

三、XML DOM

   DOM Document Object Model,文档对象模型)定义了访问和操作文档的标准方法。

DOM XML文档作为树结构来查看。能够通过 DOM树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。

   在下面的例子中,我们使用 DOM 引用从<to> 元素中获取文本:

      xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue

xmlDoc -由解析器创建的 XML文档

getElementsByTagName("to")[0] - 第一个 <to>元素

childNodes[0] - <to> 元素的第一个子元素(文本节点)

nodeValue - 节点的值(文本本身)

 

四、XML to HTML

HTML 中显示XML 数据

<html>
<body>
<script type="text/javascript">
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;
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("CD");
for (i=0;i<x.length;i++)
  {
  document.write("<tr><td>");
  document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
  document.write("</td><td>");
  document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
  }
document.write("</table>");
</script>
</body>
</html>


五、XML应用程序

<html>
<head>
<script type="text/javascript">
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","/example/xmle/cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
x=xmlDoc.getElementsByTagName("CD");
i=0;
function displayCD()
{
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);
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();
  }
}
</script>
</head>
<body οnlοad="displayCD()">
<div id='showCD'></div><br />
<input type="button" οnclick="previous()" value="<<" />
<input type="button" οnclick="next()" value=">>" />
</body>
</html> 


                                                            

XML高级

一、命名空间

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

使用命名空间(Namespaces

这个 XML 文档携带着某个表格中的信息:

<h:table xmlns:h="http://www.w3.org/TR/html4/">
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
   </h:tr>
</h:table>

XML 文档携带着有关一件家具的信息:

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

与仅仅使用前缀不同,我们为 <table> 标签添加了一个xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。

二、CDATA

所有 XML 文档中的文本均会被解析器解析。只有CDATA 区段(CDATA section)中的文本会被解析器忽略。

1PCDATA

    PCDATA 指的是被解析的字符数据(Parsed Character Data)。XML解析器通常会解析 XML文档中所有的文本。当某个 XML元素被解析时,其标签之间的文本也会被解析:

     <message>此文本也会被解析</message>

2、转义字符

   非法的 XML 字符必须被替换为实体引用(entity reference)。假如您在XML 文档中放置了一个类似"<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。

3CDATA

    术语 CDATA 指的是不应由XML 解析器进行解析的文本数据(Unparsed Character Data)。在XML 元素中,"<""&"是非法的。

    "<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

    "&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量"<" "&" 字符。为了避免错误,可以将脚本代码定义为CDATACDATA部分中的所有内容都会被解析器忽略。CDATA部分由 "<![CDATA["开始,由 "]]>"结束:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
  {
  return 1;
  }
else
  {
  return 0;
  }
}
]]>
</script>

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

4、关于 CDATA部分的注释:

  CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的CDATA 部分。

  标记 CDATA 部分结尾的"]]>" 不能包含空格或折行。

以上是关于XML的主要内容,如果未能解决你的问题,请参考以下文章

xmlxml编程

XMLXML大揭秘

xml基础

python 基础 xml和request

java基础之XML

python XML基础