<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
</head>
<card id="wapview" title="日志内容">
-- 日志内容 --<p>XML 文件          &lt;-&gt;; 数据库表内容<br/>XML的文档格式 <br/>　　首先介绍XML文档内容的基本单元——元素，它的语法格式如下： <br/>　　〈标签〉文本内容〈/标签〉 <br/>　　元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如: <br/>　　&lt;姓名&gt;;王平&lt;/姓名&gt;; <br/>　　无论文本内容有多长或者多么复杂，XML元素中还可以再嵌套别的元素，这样使相关信息构成等级结构。下面的例子中，在&lt;employees&gt;;的元素中包括了所有职员的信息，每位职员都由&lt;employee&gt;;元素来描述，而&lt;employee&gt;;元素中又嵌套了&lt;name&gt;;和&lt;salary&gt;;元素。 <br/>　　例1： <br/>　　&lt;employees&gt;; <br/>　　　　&lt;employee&gt;; <br/>　　　　　　&lt;name&gt;;Lars Peterson&lt;/name&gt;; <br/>　　　　　　&lt;salary&gt;;25000&lt;/salary&gt;; <br/>　　　　&lt;/employee&gt;; <br/>　　　　&lt;employee&gt;; <br/>　　　　　　&lt;name&gt;;Charlotte M. Cooper&lt;/name&gt;; <br/>　　　　　　&lt;salary&gt;;34500&lt;/salary&gt;; <br/>　　　　&lt;/employee&gt;; <br/>　　&lt;/employees&gt;; <br/>　　除了元素，XML文档中能出现的有效对象是：处理指令、注释、根元素、子元素和属性。 <br/>● 处理指令 <br/>　　处理指令给XML解析器提供信息，使其能够正确解释文档内容，它的起始标识是“&lt;?”，结束标识是“?&gt;;”。常见的XML声明就是一个处理指令： <br/>　　&lt;?xml version=“1.0”?&gt;; <br/>　　处理指令还可以有其他的用途，比如定义文档的编码方式是GB码还是Unicode编码方式，或是把一个样式单文件应用到XML文档上用以显示。 <br/>● 注释 <br/>　　注释是XML文件中用作解释的字符数据，XML处理器不对它们进行任何处理。注释是用“&lt;!--”和“ --&gt;; ”引起来的，可以出现在XML元素间的任何地方，但是不可以嵌套： <br/>　　&lt;!--这是一个注释--&gt;; <br/>● 根元素和子元素 <br/>　　如果一个元素从文件头的序言部分之后开始一直到文件尾，包含了文件中所有的数据信息，我们称之为根元素。 <br/>　　XML元素是可以嵌套的，那么被嵌套在内的元素称为子元素。在前面的例子中?lt;employee&gt;;就是&lt;employees&gt;;的子元素。 <br/>● 属性 <br/>　　属性给元素提供进一步的说明信息，它必须出现在起始标签中。属性以名称/取值对出现，属性名不能重复，名称与取值之间用等号“=”分隔，并用引号把取值引起来。例如： 　　&lt;salary currency=“US$$”&gt;; 25000 &lt;/salary&gt;; <br/>　　上例中的属性说明了薪水的货币单位是美元。 <br/>XML的语法 <br/>　　XML文档的基本结构由序言部分和一个根元素组成。序言包括了XML声明和DTD（或者是XML Schema），DTD（Document Type Define，文档定义类型）和XML Schema都是用来描述XML文档结构的，也就是描述元素和属性是如何联系在一起的。 <br/>　　例如，在例1的文档前面加上如下的序言部分，就构成了一个完整的XML文档： <br/>　　&lt;?xml version=“1.0”?&gt;; <br/>　　&lt;!DOCTYPE employees SYSTEM“employees.dtd”&gt;; <br/>　　一个XML文档中有且仅有一个根元素，其他所有的元素都是它的子元素，在例1中，&lt;employees&gt;;就是根元素。 <br/>　　一个XML文档首先应当是“格式良好的”（Well-Formed），该规定的正式定义位于： <br/>　　http://www.w3.org/TR/REC-xml <br/>　　“格式良好的”XML文档除了要满足根元素唯一的特性之外，还包括： <br/>　　● 起始标签和结束标签应当匹配：结束标签是必不可少的； <br/>　　● 大小写应一致：XML对字母的大小写是敏感的，&lt;employee&gt;;和&lt;Employee&gt;;是完全不同的两个标签，所以结束标签在匹配时一定要注意大小写一致； <br/>　　● 元素应当正确嵌套：子元素应当完全包括在父辈元素中，下面的例子就是嵌套错误： <br/>　　&lt;A&gt;; <br/>　　　　&lt;B&gt;; <br/>　　　　&lt;/A&gt;; <br/>　　&lt;/B&gt;; <br/>　　正确的嵌套方式如下： <br/>　　&lt;A&gt;; <br/>　　　　&lt;B&gt;; <br/>　　　　&lt;/B&gt;; <br/>　　&lt;/A&gt;; <br/>　　● 属性必须包括在引号中；<br/>单引号双引号都可以，一般是双引号。 &lt;gangster name='George "Shotgun" Ziegler'&gt;<br/>　　● 元素中的属性是不允许重复的。<br/>数据既可以存储在子元素中也可以存储在属性中， 我的经验是属性在HTML中可能相当便利，但在XML中，你最好避免使用，把数据存储到子元素中。有些时候应该为一个元素设计一个ID引用，通过这个ID可以引用存取特定的XML元素，就象HTML中的name和id属性一样。　　<br/>XML文档的“有效性”是指一个XML文档应当遵守DTD文件或是Schema的规定，“有效的”XML文档肯定是“格式良好的”，有关内容我们会在以后详细说明。 XML Schema(XML模式)是基于XML的DTD的替代品，DTD和Schema可以相互替代。<br/>●XML的名称空间 <br/>　　XML文档中很可能会定义许多名字相同而意义不同的元素或属性，尤其在把不同的XML文档合而为一时，更容易产生冲突。名称空间就是为了解决这个问题而提出的。它用URI（Uniform Resource Indicator，统一资源指示器）加以区别，是在XML文件的元素和属性中出现的所有名称的集合。如下例： <br/>　　&lt;pr:payment xmlns:pr=“http://www. microsoft.com/payroll”&gt;; <br/>　　&lt;pr:employee&gt;;Lars Peterson&lt;/pr:employee&gt;; <br/>　　&lt;pr:description&gt;;Reimburse expenses&lt;/pr:description&gt;; <br/>　　&lt;pr:total&gt;;199.76&lt;/pr:total&gt;; <br/>　　&lt;/pr:payment&gt;; <br/>　　有了名称空间，用户就可以保证在文件中使用的名称是唯一的。对元素的属性xmlns进行定义就表示对该元素指定了一个名称空间。namespace_name必须是一个有效的URI。 <br/>　　如果省略local_prefix（本地前缀），这时就构成了缺省名称空间： <br/>　　&lt;payment xmlns=“http://www.microsoft.com/acct”&gt;; <br/>　　&lt;customer&gt;;1234&lt;/customer&gt;; <br/>　　&lt;amount&gt;;500.00&lt;/amount&gt;; <br/>　　&lt;date_received&gt;;12-03-2000&lt;/date_received&gt;; <br/>　　&lt;/payment&gt;; <br/>　　如果对一个元素定义了缺省名称空间，那么该元素及其子元素，包括它们的属性都会自动地成为该名称空间的一部分，不用再在每一个元素和属性前面一一标明了。<br/>●使用XML,空白将被保留<br/>在XML文档中，空白部分不会被解析器自动删除。<br/>这一点与HTML是不同的。在HTML中，这样的一句话：<br/>"Hello              my name is Ordm"将会被显示成：“Hello my name is Ordm”,<br/>因为HTML解析器会自动把句子中的空白部分去掉。<br/>●XML元素命名<br/>XML元素命名必须遵守下面的规则：<br/>元素的名字可以包含子母，数字和其他字符。 <br/>元素的名字不能以数字或者标点符号开头。 <br/>元素的名字不能以XML(或者xml，Xml,xMl...)开头。 <br/>元素的名字不能包含空格。 <br/>自己“发明”的XML元素还必须注意下面一些简单的规则：<br/>任何的名字都可以使用，没有保留字（除了XML），但是应该使元素的名字具有可读性，名字使用下划线是一个不错的选择。<br/>例如: &lt;first_name&gt;, &lt;last_name&gt;.<br/>尽量避免使用“-”，“.”，因为有可能引起混乱。<br/>只要你愿意元素的名字可以很长，但也不要太夸张了哦。命名应该遵循简单易读的原则，例如：&lt;book_title&gt;是一个不错的名字，而&lt;the_title_of_the_book&gt;则显得罗嗦了。 <br/>XML文档往往都对应着数据表，我们应该尽量让数据库中的字段的命名和相应的XML文档中的命名保持一致，这样可以方便数据变换。<br/>非英文/字符/字符串也可以作为XML元素的名字，例如&lt;蓝色理想&gt;&lt;经典论坛&gt;这都是完全合法的名字。但是有一些软件不能很好的支持这种命名，所以尽量使用英文字母来命名。<br/>在XML元素命名中不要使用":"，因为XML命名空间需要用到这个十分特殊的字符。<br/><br/>　　在本文开始部分，我们对XML这个新兴的技术做了一个概述，对它的优缺点进行了分析，并对其美好的应用前景进行了展望。在本文后半部分则对XML文档的相关语法、格式做了简要的描述，并介绍了几种有用的开发工具。在以后的内容中，我们会全面展开，深入到XML技术内部，去探索一下这个美妙的世界！<br/><br/>一、显示XML <br/>　　XML文档本身只描述数据内容，它的显示功能由样式单来完成。利用样式单技术时，输出平台不局限于显示器，可以是打印机、绘图仪或者是多媒体播放器。使用独立的样式单文件制定显示格式的一大优势在于：对同一份数据文件可以制定不同的样式风格，应用在不同的场合，使数据能够更合理、更有针对性地表现出来，提高了数据的重用性。 <br/>　　目前，W3C正式推荐的样式单标准有两种: 一种是层叠样式单CSS（Cascading Style Sheets）；另一种是可扩展样式单语言XSL。 <br/>　　CSS最初是用于制定HTML文档显示格式的，现在也可用来对XML文档进行简单的样式规划。CSS在HTML中的应用极为广泛，但它在文本置换、依据文本内容而决定显示方式、对数据进行排序等智能化的显示功能上略显不足。 <br/>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br/>&lt;?xml-stylesheet type="text/css" href="cd_catalog.css"?&gt;<br/>　　而XSL则较好地解决了CSS的这些问题，它最常用的功能是将XML的置标转换成为HTML的置标并显示输出。而且XSL还可以将XML文档向任何其他格式的结构文档进行转换。这种功能在B2B的商务模式中有着很好的应用前景。 <br/>　　XSL利用模式匹配的方法，选择XML文档中需要处理的元素／属性，再针对这些特定的对象制定相应的转换规则。借助XSL，我们还可以添加新的元素／属性，对所有元素/属性进行重新排序、循环处理、条件判断等程序化的控制，使其适应各种复杂的需求。 <br/>　　在XML文档中引用XSL的格式如下： <br/>　　&lt;?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?&gt;; <br/>　　一个XML文档只能引用一个XSL样式单。XML解析器在处理XML文档时，遇到处理指令后，会载入指定的XSL样式单，然后根据其中的规则进行相应的转换处理。<br/><br/><br/>二、绑定XML <br/>　　Web服务器与客户机之间的数据传递方式有三种: HTML页面、XML文档以及XML数据岛。其中，XML数据岛通过特定的标签把XML数据直接嵌入到HTML文档中。采用数据岛作为交互手段，不仅可以使数据具备一定的语义信息，同时还能保持HTML原有的一些特色，如利用用户端脚本程序实现动态信息交换等。 <br/>　　XML数据岛的实现方法是在HTML文档中使用&lt;XML&gt;;标签。代码的嵌入方式有两种: 直接嵌入（如例１）和外部引用（如例２）。 <br/>　　例１： <br/>　　&lt;XML ID=“MyXMLData”&gt;; <br/>　　&lt;?xml version=“1.0” ?&gt;; <br/>　　……XML definitions…… <br/>　　&lt;/XML&gt;; <br/>　　例２： <br/>　　&lt;XML ID=“MyXMLData” SRC=“http://www.microsoft.com/MyXMLData.xml”&gt;; <br/>　　&lt;/XML&gt;; <br/>　　在插入数据岛之后，就可以把XML中的元素同HTML元素链接在一起，利用HTML的表现手法显示XML数据，这种链接关系被称为绑定。绑定的方式按照HTML元素的性质可以分为两种：单值对象和表格对象。 <br/>　　单值对象的数据绑定需要在HTML元素中设置DATASRC属性和DATAFLD属性。DATASRC属性是区分XML数据岛对象的唯一标识，并且必须加上前缀“#”；DATAFLD属性则标识了数据岛中的元素对象。例3就是把一个HTML文本输入框与&lt;salary&gt;;元素进行了绑定。 <br/>　　例３： <br/>　　&lt;INPUT TYPE=“TEXT” <br/>　　DATASRC=“#MyXMLData” <br/>　　DATAFLD=“salary”&gt;; <br/>　　至于表格对象，主要是与HTML中的&lt;TABLE&gt;;标签绑定。一般地，可以借助DSO（Data Source Object，数据源对象）等ActiveX控件更方便、有效地处理表格数据。具体使用方法在以后的内容中将做详细介绍。<br/>XML数据岛可以绑定到HTML元素上（比如表格）。<br/>在下面的例子中，一个XML数据岛（ID=cdcat）被从外部XML文档载入。一个HTML的表格绑定到此数据岛上。HTML表格内部的span元素使用datafld属性和XML文档相应的XML元素相互绑定。<br/>&lt;html&gt;<br/>&lt;body&gt;<br/>&lt;xml id="cdcat" src="cd_catalog.xml"&gt;&lt;/xml&gt;<br/>&lt;table border="1" datasrc="#cdcat"&gt;<br/>&lt;tr&gt;<br/>&lt;td&gt;&lt;span datafld="ARTIST"&gt;&lt;/span&gt;&lt;/td&gt;<br/>&lt;td&gt;&lt;span datafld="TITLE"&gt;&lt;/span&gt;&lt;/td&gt;<br/>&lt;/tr&gt;<br/>&lt;/table&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/><br/>三、访问XML <br/>　　Document Object Model（文档对象模型）简称为DOM，是对Web文档进行应用开发、编程的应用程序接口（API），是W3C公布的一种跨平台的、与语言无关的接口规范。 <br/>　　DOM采用对象模型和一系列的接口来描述XML文档的内容和结构，即利用对象把文档模型化。这种对象模型实现的基本功能包括: <br/>　　● 描述文档表示和操作的接口； <br/>　　● 接口的行为和属性； <br/>　　● 接口之间的关系以及互操作。 <br/>　　DOM对结构化的XML文档进行解析，文档中的指令、元素、实体、属性等所有个体都可以用对象模型表示。整个文档的逻辑结构类似一棵树，生成的对象模型就是树的节点，每个对象同时包含了方法和属性。 <br/>　　利用DOM，开发人员可以进行动态地创建XML文档、遍历结构、添加/修改/删除内容等操作。DOM面向对象的特性，使人们在处理和XML解析相关的事务时节省大量精力，是一种符合代码重用思想的强有力编程工具。<br/><br/><br/>四、XML解析器<br/>如果浏览器使用javascript作为脚本语言,那么利用下面的代码可以创建XML文档对象:<br/>var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")<br/>如果浏览器使用VBScript作为脚本语言,那么利用下面的代码可以创建XML文档对象:<br/>set xmlDoc=CreateObject("Microsoft.XMLDOM")<br/>如果在ASP程序中使用VBScript脚本语言，那么就可以使用下面的代码形式:<br/>set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")<br/>将XML文档载入解析器<br/>使用脚本代码可以将XML文档载入解析器。<br/>下面的代码可以将一个XML文档载入解析器:<br/>&lt;script type="text/javascript"&gt;<br/>var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")<br/>xmlDoc.async="false"<br/>xmlDoc.load("note.xml")<br/>// ....... processing the document goes here<br/>&lt;/script&gt;<br/>第二行代码创建Microsoft XML解析器的实例。<br/>第三行代码关闭异步载入，确保XML解析器在把XML文档完全载入以前不会对XML文档进行解析。<br/>第四行则告诉解析器需要载入的XML文档名字是note.xml。<br/>把纯XML文档由字符载入解析器<br/>解析器可以从一个文本字符串中载入XML文本。<br/>下面的代码演示了将文本字符串载入解析器:<br/>&lt;script type="text/javascript"&gt;<br/>var text="&lt;note&gt;"<br/>text=text+"&lt;to&gt;Tove&lt;/to&gt;&lt;from&gt;Jani&lt;/from&gt;"<br/>text=text+"&lt;heading&gt;Reminder&lt;/heading&gt;"<br/>text=text+"&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;"<br/>text=text+"&lt;/note&gt;"<br/>var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")<br/>xmlDoc.async="false"<br/>xmlDoc.loadXML(text)<br/>// ....... processing the document goes here<br/>&lt;/script&gt;<br/>注意这里载入字符串使用的是"loadXML()"方法）（而不是前面用过的"load()"方法)， "loadXML()"是用于载入字符串，"load()"是用于载入XML文档。<br/>使用javascript语言显示XML数据<br/>可以使用javascript语言来显示XML数据。<br/>javascript (或者 VBScript)可以从XML文档中导入数据，并将这些数据在HTML页面中显示出来。<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;script type="text/javascript"<br/>for="window" event="onload"&gt;<br/>var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")<br/>xmlDoc.async="false"<br/>xmlDoc.load("xml_note.xml")<br/>nodes=xmlDoc.documentElement.childNodes<br/>to.innerText=    nodes.item(0).text<br/>from.innerText=  nodes.item(1).text<br/>header.innerText=nodes.item(2).text<br/>body.innerText=  nodes.item(3).text<br/>&lt;/script&gt;<br/>&lt;title&gt;HTML using XML data&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;body bgcolor="yellow"&gt;<br/>&lt;h1&gt;W3Schools.com Internal Note&lt;/h1&gt;<br/>&lt;b&gt;To: &lt;/b&gt;<br/>&lt;span id="to"&gt; &lt;/span&gt;<br/>&lt;br /&gt;<br/>&lt;b&gt;From: &lt;/b&gt;<br/>&lt;span id="from"&gt;&lt;/span&gt;<br/>&lt;hr&gt;<br/>&lt;b&gt;&lt;span id="header"&gt;&lt;/span&gt;&lt;/b&gt;<br/>&lt;hr&gt;<br/>&lt;span id="body"&gt;&lt;/span&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/></p><br/><a href="wapblog.asp">返回</a> | <a href="index.asp">首页</a>
</card>
</wml>