Welcome my friend. Here is Standing's lifetime miracle......

Always Standing

Lifetime...
[原创]XML Basic

 

 

XML Basic

1.         XML was designed to describe, store, carry, and exchange data and to focus on what data is.

XML是用来描述数据的,他不关心Display。相反HTML则关心Display,这是他们同为Markup Language却不同的地方

就像数据库本身也只是一种描述数据的结构形式,需要一些前端支持才能显示出来,最简单的例子就是PB(中国人最喜欢的数据库前端开发软件)。

XML 使用 Document Type Definition (DTD) XML Schema 来描述数据,现在DTD用的比较少,大部分情况我们使用Schema 因为Schema本身也是XMLDTD不是XML结构的

此外XML也用于存储数据和交换数据。XML可以作为数据库的核心来存储数据。基于XML的各种协议体现了XML的交换能力(如SOAP WAP)。

最后,XML是平台无关的——现在很流行跨平台,不是么J

好了废话少说我们继续

 

2.         XML tags are not predefined. You must define your own tags

让我们来看一段简单的XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>Standing</to>

<from>Jing</from>

<heading>My birthday!!!</heading>

<body>Don't forget my birthday or…</body>

</note>

如果大家接触过HTML/XHTML那么如果要显示这些东西可能要这样写:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>Letter</title>

</head>

 

<body>

<table width="300" border="0" cellspacing="0" cellpadding="0">

  <tr>

    <td>From</td>

    <td>Standing</td>

  </tr>

  <tr>

    <td>To</td>

    <td>Jing</td>

  </tr>

  <tr>

    <td>Heading</td>

    <td>My Birthday!!! </td>

  </tr>

  <tr>

    <td>Body</td>

    <td>Don't forget my birthday or…</td>

  </tr>

</table>

</body>

</html>

好像有些乱J

虽然这种对比有些不恰当——之前我们说过XMLHTML各司其职——但是由于他们的形似还是值得对比一下。

            首先他们都是Markup Language 所以形式上大同小异;再看标签的名字,XML很随意,而HTML必须按照<html><body>…这样的规定来写,在HTML文档里出现了<from><to>这样的非预定义元素是没有意义的,这样我们就看出了XML的灵活性,而且在某种意义上来说HTML可以看作是XML的一个应用。总之,XML文档是可以由用户自己随意定义的,只要符合XML的格式规定就可以。“随意”也就注定了他的强大,就像太极拳一样J

3.         XML Syntax

XML文档的格式规定是非常严格的。让我们来看段XML

 

第一行是XML文档声明(declaration)它说明了XML文档的版本和字符的编码

第二行指明XML的样式表(具体会在后续介绍)

第三行指名了DTD文件(具体会在以后介绍)

第四行是注释

第四行之后才是XML的正式内容。XML文档其实就是一些闭合的“标签”,标签内部可以有属性,大概是这样的一个形式:

<element attr=”I am an attribute”>I am a text node</element>

另外还有些特殊的——CData

<script>

<![CDATA[

function matchwo(a,b)

{

if (a < b && a < 0) then

   {

   return 1

   }

else

   {

   return 0

   }

}

]]>

</script>

CData出现的原因就在于一些特殊字符的存在。在XML里有一些特殊的字符:

转义字符

特殊字符

&lt;

< 

less than

&gt;

> 

greater than

&amp;

&

ampersand 

&apos;

'

apostrophe

&quot;

"

quotation mark

如果想表示这些特殊字符必须转义。而用CDATA就可以避免使用转义字符J

 

以下是关于XML语法的一些注意事项:

Xml element 命名规则:

·         可以由数字,字母,和一些其他字符组成;

·         不能由数字和标点符号起始;

·         不能由(XMLXml…)起始;

·         不能有空格。

 

"Well Formed""Valid"

所谓“well formed”指的是一个XML文档符合W3CXML文档的定义,也就是“是一个XML文档”

而“Valid”指的是这个文档是否满足我们自己定义的规则,这些规则由DTD或者XML Schema来定义,也就是“是一个符合要求的XML文档”。

 

XML是错误敏感的:

错误敏感也就是说,如果你的程序是基于XML的,那么当XML文档不是“Well Formed”或者不是“Valid”的时候你的应用程序必须中断去处理XML的错误。这种特性是由XML的严格性(strict)决定的,与HTML形成鲜明的对比——一个浏览器可以忽略大量的HTML错误而正常显示页面。

 

XML文档大小写敏感:

这个不用多说,Standingstanding是不同的。

 

XML文档必须有一个根节点(看好了,一个哦)

 

XML文档的属性值必须用引号引起来(单双都可以)

 

XML文档里空白符是受保护的(别指望多敲几个空格人家不知道,嘿嘿)

 

4.         Name Conflicts

命名冲突怎么解决?

两种方法:一是用前缀;二是用Namespace,看下面两段XML

<cup>

   <contain>Warter</ contain>

   <shape>Round</ shape>

</cup>

<cup>

   <name>World Cup</ contain>

   <gainer>China</ gainer>

   <!—Is that a dream? -->

</cup>

这两个cup一个是水杯,一个是奖杯,那么怎么来区分呢?

方法一:

<s:cup>

   < s:contain>Warter</ s:contain>

   < s:shape>Round</ s:shape>

</ s:cup>

<j:cup>

   < j:name>World Cup</ j:contain>

   < j:gainer>China</ j:gainer>

   <!—Is that a dream? -->

</ j:cup>

我们给两个cup加上前缀,很显然,区分开了。

方法二:

<s:cup xmlns:s="http://www.w3.org/realcup” >

   < s:contain>Warter</ s:contain>

   < s:shape>Round</ s:shape>

</ s:cup>

<j:cup xmlns:s="http://www.w3.org/pot” >

   < j:name>World Cup</ j:contain>

   < j:gainer>China</ j:gainer>

   <!—Is that a dream? -->

</ j:cup>

这个我们给不同的前缀指定了namespace。现在我们的前缀有了具体的意义。

方法三:

<cup xmlns="http://www.w3.org/realcup” >

   < contain>Warter</ contain>

   < shape>Round</ shape>

</ cup>

<cup xmlns="http://www.w3.org/pot” >

   < name>World Cup</ contain>

   < gainer>China</ gainer>

   <!—Is that a dream? -->

</ cup>

这个我们利用了默认的namespace。这样我们就可以省去前缀。

XML Programming

1.       Data Island

这个东西我觉得挺有趣的J

给个例子:

<html>

<body>

 

<xml id="cdcat" src="cd_catalog.xml"></xml>

 

<table border="1" datasrc="#cdcat">

<tr>

<td><span datafld="ARTIST"></span></td>

<td><span datafld="TITLE"></span></td>

</tr>

</table>

</body>

</html>

cd_catalog.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited with XML Spy v2006 (http://www.altova.com) -->

<CATALOG>

     <CD>

            <TITLE>Empire Burlesque</TITLE>

            <ARTIST>Bob Dylan</ARTIST>

            <COUNTRY>USA</COUNTRY>

            <COMPANY>Columbia</COMPANY>

            <PRICE>10.90</PRICE>

            <YEAR>1985</YEAR>

     </CD>

     <CD>

            <TITLE>Hide your heart</TITLE>

            <ARTIST>Bonnie Tyler</ARTIST>

            <COUNTRY>UK</COUNTRY>

            <COMPANY>CBS Records</COMPANY>

            <PRICE>9.90</PRICE>

            <YEAR>1988</YEAR>

     </CD>

</CATALOG>

这个例子来自www.w3schools.com, 大家可以在这里看到效果。

这个只有IE支持,所以应用可能不广泛。

2.       XML HTTP Request

这个大家一定都如雷贯耳了吧,这项技术可造就了我们每天几乎必去的Google。他也是流行的Ajax的核心技术组成。

这里我们只举个小例子

<html>

<head>

<script type="text/javascript">

var xmlhttp

 

function loadXMLDoc(url)

{

xmlhttp=null

// code for Mozilla, etc.

if (window.XMLHttpRequest)

  {

  xmlhttp=new XMLHttpRequest()

  }

// code for IE

else if (window.ActiveXObject)

  {

  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

  }

if (xmlhttp!=null)

  {

  xmlhttp.onreadystatechange=state_Change

  xmlhttp.open("GET",url,true)

  xmlhttp.send(null)

  }

else

  {

  alert("Your browser does not support XMLHTTP.")

  }

}

 

function state_Change()

{

// if xmlhttp shows "loaded"

if (xmlhttp.readyState==4)

  {

  // if "OK"

  if (xmlhttp.status==200)

  {

  alert("XML data OK")

  document.getElementById('A1').innerHTML=xmlhttp.status

  document.getElementById('A2').innerHTML=xmlhttp.statusText

  document.getElementById('A3').innerHTML=xmlhttp.responseText

  }

  else

  {

  alert("Problem retrieving XML data:" + xmlhttp.statusText)

  }

  }

}

 

</script>

</head>

 

<body onload="loadXMLDoc('note.xml')">

<h2>Using the HttpRequest Object</h2>

 

<p><b>status:</b>

<span id="A1"></span>

</p>

 

<p><b>status text:</b>

<span id="A2"></span>

</p>

 

<p><b>response:</b>

<br><span id="A3"></span>

</p>

 

</body>

</html>

这里值得一提的就是xmlhttp.open("GET",url,true) 这个方法,第三个参数是true代表异步,也就是send方法不会阻塞script的执行。

其他的例子和一些参考请参阅这里

posted on 2006-11-29 13:16  Standing  阅读(1894)  评论(2)    收藏  举报