什么是XML?

 更新时间:2016年9月20日 19:06  点击:1462
什么是XML?
XML是EXtensible Markup Language的缩写
XML是一种类似于HTML的标记语言
XML是用来描述数据的
XML的标记不是在XML中预定义的,你必须定义自己的标记
XML使用文档类型定义(DTD)或者模式(Schema)来描述数据
XML使用DTD或者Schema后就是自描述的语言
--------------------------------------------------------------------------------
XML和HTML的主要区别是什么
XML是用来存放数据的
XML不是HTML的替代品,XML和HTML是两种不同用途的语言。
XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。
HTML是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。
HTML是与显示信息相关的, XML则是与描述信息相关的。
--------------------------------------------------------------------------------
XML 什么也不做
XML 被设计成什么都不做的。
也许看起来很难理解,但事实上XML确实什么都不做。XML只是用来组织、存储和发送信息的。
下面的例子是Ordm给Lin的便条,使用的是XML格式:
<note>
<to>Lin</to>
<from>Ordm</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
这个便条有信息头,又信息主体,还包括发送人和接收人。尽管如此,这个XML文档仍然什么都不做,他只是用XML标记存储信息的文件。有人已经编写出来发送和接收并且显示这种格式信息的软件。
--------------------------------------------------------------------------------
XML是自由的、可以扩展的
XML标记并不是预先规定好的,你必须创造你自己的标记。
在HTML文档中必须使用规则中定义好的标记。比如:<P><br><a></a>等等。
XML允许你定义自己的标记以及文档结构。
比如在上面例子中的"<to>"、"<from>"标记都不是在XML规范中事先定义好的。这些标记都是XML文档的作者“创造”出来的。
--------------------------------------------------------------------------------
XML是HTML的补充
XML并不是HTML的替代品。
XML并不是HTML的替代品,理解这一点非常重要。在将来的网页开发中,XML将被用来描述、存储数据,而HTML则是用来格式化和显示数据的。
对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理信息的工具。
--------------------------------------------------------------------------------
XML在未来Web开发中的应用
XML无处不在
XML发展的非常迅速,这实在令人感到惊奇,有很多的软件开发商都采用了XML标准。

我们相信,在未来的Web开发中,XML将和HTML一样受到重视,他们都是Web技术的基础。XML将成为最普遍的数据操纵和数据传输的工具

XML是eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的GML(Generalized Markup Language)

同HTML一样, XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集,它是描述网络上的数据内容和结构的标准。尽管如此,XML不象HTML,HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ,XML则对数据赋予上下文相关功能,它继承了SGML的大部分功能,却使用了不太复杂的技术。.

为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。

因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (www.w3.org/TR/WD-xml)。因为XML 是个公共格式, (它不专属于任何一家公司),你不必担心XML技术会成为少数公司的盈利工具,XML不是一个依附于特定浏览器的语言

XML(可扩展标记语言)是从称为SGML(标准通用标记语言)的更加古老的语言派生出来的。SGML的主要目的是定义使用标签来表示数据的标记语言的语法。

标签由包围在一个小于号(<)和一个大于号(>)之间的文本组成,例如<tag>。起始标签(start tag)表示一个特定区域的开始,例如<start>;结束标签(end tag)定义了一个区域的结束,除了在小于号之后紧跟着一个斜线(/)外,和起始标签基本一样,例如</end>。SGML还定义了标签的特性(attribute),它们是定义在小于号和大于号之间的值,例如<img src="picture.jpg">中的src特性。如果你觉得它看起来很熟悉的话,应该知道,基于SGML的语言的最著名实现就是原始的HTML。

SGML常用来定义针对HTML的文档类型定义(DTD),同时它也常用于编写XML的DTD。SGML的问题就在于,它允许出现一些奇怪的语法,这让创建HTML的解析器成为一个大难题:

1  某些起始标签不允许出现结束标签,例如HTML中<img>标签。包含了结束标签就会出现错误。

2  某些起始标签可以选择性出现结束标签或者隐含了结束标签,例如HTML中<p>标签,当出现另一个<p>标签或者某些其他标签时,便假设在这之前有一个结束标签。

3  某些起始标签要求必须出现结束标签,例如HTML中<script>标签。

4  标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的,例如,<b>This is a <i> sample </b> string</i>是正确的。

5  某些特性要求必须包含值,例如<img src="picture.jpg">中的src特性。

6  某些特性不要求一定有值,例如<td nowrap>中的nowrap特性。

7  定义特性的两边有没有加上双引号都是可以的,所以<img src="picture.jpg">和<img src=picture.jpg>都是允许的。

      这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点,XML逐渐步入我们的视野。

      XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中,采用了如下的语法:

8  任何的起始标签都必须有一个结束标签。

9  可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag />。XML解析器会将其翻译成<tag></tag>。

10  标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如<b>this is a <i>sample</i> string</b>。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

11  所有的特性都必须有值。

12  所有的特性都必须在值的周围加上双引号。

这些规则使得开发一个XML解析器要简便得多,而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。

如果需要关于SGML和XML具体技术上的对比,请查看W3C的注解,位于:http://www.w3. org/TR/NOTE-sgml-xml.html

如今,XML已经是世界上发展最快的技术之一。它的主要目的是使用文本以结构化的方式来表示数据。在某些方面,XML文件也类似于数据库,提供数据的结构化视图。这里是一个XML文件的例子:


每个XML文档都由XML序言开始,在前面的代码中的第一行便是XML序言,<?xml version="1.0"?>。这一行代码会告诉解析器和浏览器,这个文件应该按照前面讨论过的XML规则进行解析。第二行代码,<books>,则是文档元素(document element),它是文件中最外面的标签(我们认为元素(element)是起始标签和结束标签之间的内容)。所有其他的标签必须包含在这个标签之内来组成一个有效的XML文件。XML文件的第二行并不一定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。

范例文件中的第三行代码是注释,你会发现它与HTML中使用的注释风格是一样的。这是XML从SGML中继承的语法元素之一。

页面再往下的一些地方,可以发现<desc>标签里有一些特殊的语法。<![CDATA[ ]]>代码用于表示无需进行解析的文本,允许诸如大于号和小于号之类的特殊字符包含在文本中,而无需担心破坏XML的语法。文本必须出现在<![CDATA[和]]>之间才能合适地避免被解析。这样的文本称为Character Data Section,简称CData Section。

下面的一行就是在第二本书的定义之前的:

<?page render multiple authors ?>

虽然它看上去很像XML序言,但实际上是一种称为处理指令(processing instruction)的不同类型的语法。处理指令(以下简称PI)的目的是为了给处理页面的程序(例如XML解析器)提供额外的信息。PI通常情况下是没有固定格式的,唯一的要求是紧随第一个问号必须至少有一个字母。在此之后,PI可以包含除了小于号和大于号之外的任何字符串序列。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> 修改xml内容 </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <!--#include file="top.asp"-->
 <%
 id=request("id")
 if IsNumeric(id)=false or isNull(id) then
response.write ("参数不正确,请返回!")
response.end
end if 
addok=request("addok")
If addok="" Or IsNull(addok) then
   strSourceFile = Server.MapPath("./") & "test.xml"
  '获取XML文件的路径这里根据你的虚拟目录不同而不同
  Set objXML = Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
 '以自由线程创建一个XML对像
 objXML.load(strSourceFile)'把XML文件读入内存
 Set objRootsite = objXML.documentElement.selectSingleNode("root")
 id=objRootsite.childNodes.item(id).childNodes.item(0).text
 site=objRootsite.childNodes.item(id).childNodes.item(1).text
 url=objRootsite.childNodes.item(id).childNodes.item(2).text
%>
  <form name="form1" method="post" action="?addok=edit&id=<%=id%>">
  网站名:<input type="text" name="site" value="<%=site%>" size="30">

  网  址:<input type="text" name="url" value="<%=url%>" size="40">

  <input type="submit" value="修改"> <input type="reset" value="重置">
  </form>
<%
End If
If addok="edit" Then
  site=request("site")
  url=request("url")
  strSourceFile = Server.MapPath("./") & "test.xml"
  '获取XML文件的路径这里根据你的虚拟目录不同而不同
  Set objXML = Server.CreateObject("Microsoft.XMLDOM")
  '创建XML对像
  objXML.load(strSourceFile)
  '把XML文件读入内存中
  Set objRootlist = objXML.documentElement.selectSingleNode("root")
  set rootOldNode=objRootlist.childNodes.item(id) 
  brstr=chr(13)&chr(10)&chr(9)
  XMLnode=brstr&"<list>"&vbnewline & _
     "<id>"&id&"</id>"&vbnewline & _
"<name>"&site&"</name>"&vbnewline & _
"<url>"&url&"</url>"&vbnewline & _
"<time>"&Replace(Replace(Now(),"上午 ",""),"下午 ","")&"</time>"&vbnewline & _
"</list>"&vbnewline&vbnewline
  '根据得到的数据建立XML片段
set objXML2=Server.CreateObject("Microsoft.XMLDOM")
'建立一个新XML对像
objXML2.loadXML(XMLnode)
'把XML版片段读入内存中
set rootNewNode=objXML2.documentElement
'获得objXML2的根节点
objRootlist.ReplaceChild rootNewNode,rootOldNode
'修改test.xml
objXML.save(strSourceFile)
'存储test.xml文件(因为不存储test.xml只在内存中更新了)
set objXML=nothing
set objXML2=nothing
Response.Redirect("index.asp")
response.end

End if
%>
 </BODY>
</HTML>

什么是WEB3.0?业内专家诠释:即"WEB3.0=互联网+通讯服务(Internet+Instant Communications)",即通过互联网与通讯的融合,用户可以用所有智能终端(固定电话、移动电话、PC、IPTV、其他智能终端)轻松享受看得见、听的到、用得好的即时交互的信息服务,它必然具备的特性应包括:即时性,融合性,互动性,个性化及自主性。WEB3.0技术提供的服务与目前互联网服务的核心差异在于:WEB3.0是基于个性化、订阅式、主动推送式的即时服务,而目前的互联网服务是围绕着搜索引擎的非即时服务。

看图:


 什么是2.0

定义:所谓的2.0是互联网应用理念上和架构上的升级,而不是简单的某种技术的创新或者某种应用

Ajax、blog、rss、wiki,这些是web2.0?Ajax只是一种一直以来都存在的javascript应用,blog只不过是个人主页的一种改进,rss只不过是xml中一种格式。

所以关键的不再与技术,而在于理念。理念上,Ajax推崇异步web应用;blog推崇一个人为中心的内容管理;rss将分散的个人内容有效的聚集到一起。

web2.0期间出现的应用,虽然有一定的技术含量在里面,但那不是主要因素,你没法从技术上解释web2.0,blog远不如bbs系统的技术成熟和复杂,但是理念更前卫。

我曾经一向讨厌web2.0的叫法,主要是被一些人瞎忽悠搞得很烦。但是不得不承认,web2.0确实是一个非常成功的命名。所以今天也借着这种叫法来说事,就叫web3.0吧。

 

2 web3.0

2.1 web2.0只是开始和过渡

web2.0虽然在理念上有了一定的升级,但还是远远不够的,我们仍然可以看到很多问题,我只说三个:blog的发布系统、评论系统和插件应用

2.1.1 发布系统

内容管理是blog的最基本功能,现在blog的系统也无非是实现了What You See is What you Get (WYSIWYG) 的可视化编辑,实现了分类,复杂点的实现了TAGs。内容的索引能力都是无一例外的很差(blogger可能会好点,具体没研究),版本控制似乎还没有哪个blog有,现在看来,这些功能还稍显复杂,但当一个blog堆积了1000篇文章的时候,索引和修改都会变得非常困难。就如我的blog,想要找一篇历史文章,我都用google去搜索,想要改动什么文字,我宁可重新写一篇新的,想要重新整理整个Blog?那我一定是疯了- -

所以,未来blog(其实也无所谓blog,应该是个人网络中心,下面我会讲到)的内容管理一定会加入现在wiki里面的版本控制功能,集成功能强大的全文索引功能。

我已经很久没更新blog,多半原因是后台太难用了,今天装了Live writer才有动力写篇文章上来。在网速和浏览器速度没有足够快之前,我还是宁可多花几分钟的时间下载和安装一个客户端,在享受更强大编辑功能同时,节省很多时间。

2.1.2 评论系统

上面我说到blog的技术成熟度远低于bbs,评论系统就是其中之一,纵观现在所有的blog系统和bsp,我还没见过哪个blog系统的评论功能能跟 Discuz比。blog不需要功能复杂的评论?那你可就错了,去看看老徐的博客,随便那篇文章不是成百上千的评论?你觉得新浪的评论系统够用吗?它起码有分页,比我用的mt强多了,但还是无法实现丰富的内容编辑和索引。

说道评论系统不得不说的是trackback,trackback 作为一种blog之间内容关联评论功能,本来是想泥补跨站内容关联的功能缺陷,但实现的太蹩脚太简单,以至于很多人不知道这个东西怎么用,却被 spammer找到空当大肆利用。现在已经成为一个鸡肋,很多人在扬言trackback已死。

除trackback外的评论内容,留言者都无法管理和监控,虽然有些blog系统有自动邮件提醒的功能,但这是远不够的。

所以未来评论系统也一定会强化。

2.1.3 插件应用

blog系统的不足远不止发布系统和评论系统,插件是目前填补系统功能不足的最有效手段,wordpress的成功,就得益于完善的插件平台,得到了广大开发者的支持。

但是wp的插件系统缺陷是显而易见的,我做了好多年php开发的人,使用起来都觉得头大,非技术人员就不用说了。另外,wp的插件是无法迁移到其他平台上用的,尤其是跨语言的平台。

现在国外有一些平台,已经在做这样的标准,通过一个REST风格的url就可以忽略平台限制,使用插件。比如netvibes、Facebook、iGoogle、live,国内,sohu blog也引进了netvibes的uwa框架,尝试做开放式blog widget平台。

这有点类似于rss的应用,用xml的标准推行内容传播,Open Widget则是将widget作为一种内容,通过xml的标准传播。

没有哪一家服务供应商或者平台开发者能够满足所有用户的需求,只有Open的大千世界,才是大家所期望的,所以Open Widget一定会成为一种趋势。

好了,说了这么多,无法而是想证明web2.0只是一个过度,那么什么才是web3.0呢?

2.2 什么是web3.0

其实说到这里,很多人应该已经看出来,没有什么所谓的2.0、3.0,因为你没法准确的界定他是什么样的应用,也没法界定它是什么时候开始的,什么时候结束,它只是互联网本身发展的一种趋势。

我要说的3.0,是我目前所能想象的未来互联网应用的框架。
   
  a、网站内信息可以直接和其他网站信息进行交互和倒腾,能通过第三方信息平台同时对多家网站信息进行整合使用;
  b、用户在互联网上拥有自己的数据,并能在不同的网站上使用;
  c、完全基于Web,用浏览器即可实现复杂的系统程序才具有的功能
    可以说Web3.0是三广+三跨(广域的 广语的 广博的 跨区域 跨语种 跨行业)
现实中的每一个行业都是在不断的细分和完善中发展的,比如建筑业、金融业,都已经有比较清晰的划分并且仍在细化,这是几百上千年的发展过程中建立起来的。而互联网才不过发展了不过短短十几年,对于一个可以涵盖几乎所有传统行业的领域来说,现在的互联网应用细分程度还远远不够。就如软件工程里面说的,软件开发的标准和规范还十分简单,开发方法和模块的重用程度远远不够。

互联网也是如此,各种应用的细分、完整性和重用程度远远不够。

所以我认为,未来互联网应用的发展方向一定是向着更加细分、更加专业、更加兼容的方向发展,内容管理将有专业的内容管理提供商,comments将有专业的 comments服务商;插件将有类似于rss的统一标准,而且也会出现像feedburner、google reader这样的widget托管平台和订阅平台。

blog,将演变为个人中心,个人中心中的所有内容只有一个域名和一个页面,剩下的所有的服务都由专业服务商提供,用户只需将需要的应用以widget的方式添加到自己的页面上,就可以享用各种各样完善的服务。

但也不会是像google ig、netvibes这样的集中型个人主页,因为他们没有个性,灵活性也不够。也不会是sohu这样的blog平台,因为各种服务都不是一家公司提供的,bsp可能回归到最原始的个人主页服务,提供一个二级域名和一个静态空间。

那么最主要的一个问题:帐号由谁提供呢?OpenID肯定会成为web3.0的中坚力量,将各个平台有机的连接起来,是你无论走到哪,都用同一个帐号,内容处处关联。

而id 服务本身是需要跟信用挂钩的,这是虚拟和现实之间必须建立的桥梁,现有的社区中信用服务都是依靠某种技术手段建立,都很费劲,而且无法跟现实中的人和信用建立起完整有效的关联,我们不难想到,直接掌握最可靠信用的是银行,所以未来提供OpenID或者互联网身份服务将是银行建立的一种服务,很可能成为银行的某种业务。

在这种模式下,互联网服务已经跟传统的服务行业一样,提供专业服务,收费,互联网的盈利模式也将随之改变。

本教程主要介绍HTML网页如何取得形如test.html?foo=mytest的foo参数,以及在HTML网页中如何向swf传递参数。

一、在HTML网页中使用js获取参数。
我们知道HTML页面是在客户端执行的,这样要获取参数必须使用客户端脚本(如Javascript),在这点上不同于服务器端脚本获取参数方式。下面的这段js代码获取HTML网页形如"test.html?foo=mytest&program=flash" "?"后所有参数。

<script language=javascript>
<!--
var hrefstr,pos,parastr;
hrefstr = window.location.href;
pos = hrefstr.indexOf("?");
parastr = hrefstr.substring(pos+1);
if (pos>0){
document.write("所有参数:"+parastr);
} else {
document.write("无参数");
}
//-->
</script>


下面的这段js代码则可以更加细化获取HTML网页某一参数

<script language=javascript>
<!--
function getparastr(strname) {
var hrefstr,pos,parastr,para,tempstr;
hrefstr = window.location.href;
pos = hrefstr.indexOf("?")
parastr = hrefstr.substring(pos+1);

para = parastr.split("&");
tempstr="";
for(i=0;i<para.length;i++)
{
tempstr = para[i];
pos = tempstr.indexOf("=");
if(tempstr.substring(0,pos) == strname) {
return tempstr.substring(pos+1);
}
}
return null;
}
// 获取program参数
var programstr = getparastr("program");
document.write(programstr);
//-->
</script>


二、在HTML网页中向swf传递参数。
方法一:在网页中使用js,SetVariable设置flashobject中的变量,代码如:

// "HtmlToSwf"为网页中的flashobject ID
HtmlToSwf.SetVariable("_root.info_str","Happy Newyear");


方法二:路径参数,如test.swf?foo=happy2005
方法三:使用FlashVars,以下主要介绍FlashVars的用法。使用FlashVars后嵌入HTML的flashobject代码如下:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/
pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="FlashVars" align=
"middle">
<param name="allowscriptAccess" value="sameDomain" />
<param name="movie" value="FlashVars.swf" />
<param name="FlashVars" value="foo=happy2005&program=flash&language=简体中文-中国" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="FlashVars.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="FlashVars"
align="middle" allowscriptAccess="sameDomain" FlashVars="foo=happy2005&program=flash&language=
简体中文-中国"
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />



通过上面的代码,在SWF(FlashVars.swf)中就可以直接获取foo、program、language变量数据。FlashVars.fla获取FlashVars参数的代码如下:

// 创建三个文本字段
_root.createTextField("foo_txt",1,0,0,16,16);
_root.createTextField("program_txt",2,0,32,16,16);
_root.createTextField("language_txt",3,0,64,16,16);
foo_txt.autoSize = true;
foo_txt.border = true;
program_txt.autoSize = true;
program_txt.border = true;
language_txt.autoSize = true;
language_txt.border = true;
// 获取FlashVars变量
foo_txt.text = "HTML中的foo参数:"+foo;
program_txt.text = "HTML中的program参数:"+program;
language_txt.text = "HTML中的language参数:"+language;



三、两者的有效结合。
在HTML网页中使用js获取参数,然后将获取的参数作为FlashVars写入flashobject传递给swf。代码如下:

<script language=javascript>
<!--
function writeflashobject(parastr) {
document.write("<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0
width="550" height="400" id="FlashVars" align="middle">n");
document.write("<param name="allowscriptAccess" value="sameDomain" />n");
document.write("<param name="movie" value="FlashVars.swf" />n");
document.write("<param name="FlashVars" value=""+ parastr +"" />n");
document.write("<param name="quality" value="high" />n");
document.write("<param name="bgcolor" value="#ffffff" />n");
document.write("<embed src="FlashVars.swf" quality="high" bgcolor="#ffffff" width="550"
height="400" name="FlashVars" align="middle" allowscriptAccess="sameDomain" FlashVars=
""+ parastr +"" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/
go/getflashplayer" />");
document.write("</object>");
}
function getparastr() {
var hrefstr,pos,parastr,para,tempstr1;
hrefstr = window.location.href;
pos = hrefstr.indexOf("?")
parastr = hrefstr.substring(pos+1);
return parastr;
}
var parastr = getparastr();
writeflashobject(parastr);
//-->
</script>

这篇文章主要阐述 HTML 和 XHTML 的区别。简单来说,XHTML 可以认为是 XML 版本的 HTML,为符合 XML 要求,XHTML 语法上要求更严谨些。

以下是 XHTML 相对 HTML 的几大区别:

  • XHTML 要求正确嵌套
  • XHTML 所有元素必须关闭
  • XHTML 区分大小写
  • XHTML 属性值要用双引号
  • XHTML 用 id 属性代替 name 属性
  • XHTML 特殊字符的处理

XHTML 要求正确嵌套

以下是正确的嵌套:

<p>网页教学网<strong>更新速度最快</strong>。</p>

以下是错误的嵌套:

<p>网页教学网<strong>更新速度最快</p></strong>。

XHTML 所有元素必须关闭

在 HTML 中 ,比如 <p>,<li> 这些标记,你可以不写 </p>,</li>,但是在 XHTML 里,必须要求写关闭标记 (Closing Tag)。

比如:

<p>网页教学网很认真。

应该写成:

<p >网页教学网很认真 。</p>

处理空元素

有些空元素 ,在 XHTML 里的写法是在">"之前加空格和斜杠。比如<br>,应该写成<br />。

以下 是空元素的例子:

<br />
<hr />
<img src = "/images/adpics/1/b027.jpg" alt = "webjx" />
<link rel="stylesheet" href="/styles/webjx.css" type ="text/css" />
<meta http-equiv="content -type" content="text/html; charset=UTF-8" / >

XHTML 区分大小写

HTML 不区分大小写,但是 XHTML 是区分大小写的。

XHTML 语法上要求更严谨些。要积极的看待这个问题。

XHTML 的所有标记和属性都要 小写。

比如:

<IMG SRC = "/images/adpics/1/b027 .jpg" Alt = "webjx" />

应该写成:

<img src = "/images/adpics/1/b027.jpg" alt = "webjx " />

XHTML 属性值要用双引号

情况就有所不同。并不强制要求属性值加双引号?

HTML 并不强制要求属性值加双引号。比如你可以写:

<table cellspacing = 0>
<input checked >

的几大区别:HTML 4 .01 相比实在没有什么不同?

但在 XHTML 里,应该写成:

<table cellspacing = "0 ">
<input checked = "checked" / >

XHTML 用 id 属性代替 name 属性

HTML 很多元素,比如 a,applet,frame,iframe,img 和 map,有 name 属性。在 XHTML 里是要废除的,而用 id 属性取而代之。

比如:

<img src="webjx.gif" name="webjx logo" />

应该写成:

<img src="webjx.gif" id="webjx logo" />

XHTML 特殊字符的处理

& 应该在 XHTML 里应该写成 &amp;。

比如:比如:XHTML 的所有标记和属性都要小写。

比如:

You & Me

应该写成:

You &amp; Me

还有如果内嵌 Jav ascript 代码,在 XHTML 里则应该写成:

<script type="text/javascript">// <![CDATA[
...
//]]></script>

浏览器的角度

以上是从协议标准的角度来看待这个问题的。如果从浏览器的角度来看待这个问题,情况就有所不同。

考虑一下,如果把 XHTML 写得很不严格,浏览器会怎么做?是不是会弹出一个对话框,写着“这个网站的开发人员技术不过关,写的不是正宗的 XHTML 文件,咱不显示”?显然,如果浏览器做成这个样子,倒贴钱也是不会有人用的。

从浏览器的角度看待上面几个不同,大致 是下面的测试结果(IE 和Firefox我都测试过):

  • XHTML 要求正确嵌套:如果你没有嵌套,浏览器会试图帮你嵌套。
  • XHTML 所有元素必须关闭:如果你没有关闭,浏览器会试图帮你关闭。
  • XHTML 区分大小写:你非要写成大写,浏览器帮你转换成为小写。
  • 属性值要用双引号:你非要不肯加,浏览器帮你加。
  • 特殊字符的处理:You & Me 也好,You &amp; Me 也好 ,浏览器都能读入。
  • 用 id 属性代替 name 属性 :你非要用 name 也可以。

XHTML 里应该写成 &amp;。以下是正确的嵌套。

如果 你在文档开始用 DocType 指定为 XHTML 了,有一点需要注意。在给 Tag 用 class 指定CSS 的时候,是区分大小写的。例如,你定义了一个CSS如下,

<style>
.hello { ...... }
</style >

而你使用的时候写成,

<p class="Hello"> ......

而你使用的时候写成,如果从浏览器的角度来看待这个问题 。

那这个CSS是不会被使用的。要积极的看待这个问题,这让你可以用更多的名字来命名 Style,是一个好事。

XHTML 标准的前途

从标准制定者的初衷看,制定 XHTML 标准是试图把 HTML 规范成为严格的 XML 格式,这样无可避免的会导致一个结果,就是从 HTML 到 XHTML 的升级导致标准的容错能力降低了。把自己的网页源文件写得严格一点当然是好事,但是一个标准不可能去要求浏览器降低自己的容错能力。

XHTML 1 .0 标准是兼容 HTML 4.01,是个不错的协议,可以让开发者在编写代码的同时通过一些工具来检查代码的合法性,虽然对于用户而言,制作出来的网页和 HTML 4.01 相比实在没有什么不同。对于你写新的网页来说,使用 XHTML 1.0 还是一个不错的选择。

XHTML 1.1 标准要求浏览器不再支持原先的容错能力,这是一个标准制定者走火入魔的典型例子,这个标准从学术上说非常纯净,但是对于浏览器而言,则是个呆板、笨拙、不可理喻的标准。所以目前所有由人类开发的浏览器都没有遵照所谓纯净的 XHTML 1.1的标准,你的代码只要浏览器能读懂,他都会很好的显示出来,而不跳出弹框报错。

应该写成::应该写成:以下是 XHTML 相对 !

从发展的趋势来看,一个标准没有浏览器服从,等于是没有意义的标准。从浏览器的实现角度来看,新的协议只能在原来 HTML 的基础上扩大能力增加容错 ,而不能缩小了能力减少容错。所以新的协议中,只有扩大能力增加容错的部分会被采纳,而其他部分都仅仅是纸上谈兵而已。

[!--infotagslink--]

相关文章

  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23
  • C#从数据库读取数据到DataSet并保存到xml文件的方法

    这篇文章主要介绍了C#从数据库读取数据到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以参考下...2020-06-25
  • XML、HTML、CSS与JS的区别整理

    在BS中,xml,html,css和js我们都学过,起初分不清这四者的区别和联系,随着知识的增长,有了一些体会,下面通过本文给大家简单介绍 XML、HTML、CSS与JS的区别,需要的朋友参考下...2016-02-21
  • js操作XML文件的实现方法兼容IE与FireFox

    下面小编就为大家带来一篇js操作XML文件的实现方法兼容IE与FireFox。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-01
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Xml中使用foreach遍历对象实现代码

    这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
  • Python将字典转换为XML的方法

    这篇文章主要介绍了Python将字典转换为XML的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-08-02
  • Python xmltodict模块安装及代码实例

    这篇文章主要介绍了Python xmltodict模块安装及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-05
  • 基于C#中XmlReader读取Xml的深入分析

    本篇文章是对C#中XmlReader读取Xml进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • 使用maven开发springboot项目时pom.xml常用配置(推荐)

    这篇文章主要介绍了使用maven开发springboot项目时的pom.xml常用配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-08
  • C# 对XML基本操作代码总结

    C# 对XML基本操作包括读取节点的数据,添加节点。读取节点属性,修改节点属性等...2020-06-25
  • asp.net中XML如何做增删改查操作

    工作之余,温习一下对xml的简单操作,抽个时间把asp.net XML增删改查操作方法分享给大家,需要的朋友可以参考下...2020-06-25
  • C#实现复杂XML的序列化与反序列化

    这篇文章主要介绍了C#实现复杂XML的序列化与反序列化的方法,是非常实用的一个技巧,需要的朋友可以参考下...2020-06-25
  • 使用xmltextreader对象读取xml文档示例

    这篇文章主要介绍了使用xmltextreader对象读取xml文档的示例,需要的朋友可以参考下...2020-06-25
  • 深入分析XmlSerializer对象的Xml序列化与反序列化的示例详解

    本篇文章是对XmlSerializer 对象的Xml序列化与反序列化的应用进行了详细的分析介绍,需要的朋友参考下...2021-09-22
  • Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解

    这篇文章主要介绍了Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • 详解C#对XML、JSON等格式的解析

    这篇文章主要介绍了详解C#对XML、JSON等格式的解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...2020-06-25
  • 这一次搞懂Spring的XML解析原理说明

    这篇文章主要介绍了这一次搞懂Spring的XML解析原理说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-27
  • Java如何基于DOM解析xml文件

    这篇文章主要介绍了Java如何基于DOM解析xml文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-16
  • php中SimpleXMLElement 对象转换为数组

    PHP 提供了 simplexml_load_string 方法用来解析 XML 格式的字符串,并返回 SimpleXMLElement 对象。不过一般数组是更为适用的,所以也会有转换为普通数组的需求,这个方法...2016-11-25