新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML基础 』 → [转帖]Web设计中如何使用XML数据源对象 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 21795 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [转帖]Web设计中如何使用XML数据源对象 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 XML基础 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 [转帖]Web设计中如何使用XML数据源对象

    http://www.yesky.com/SoftChannel/72342376223342592/20030603/1704962.shtml

    Web设计中如何使用XML数据源对象
    2003-06-03■wayne编译■yesky

     XML数据源对象是一个ActiveX控件,允许你在XML文件和HTML页面之间操作数据。本文将向你展示如何从各种XML数据源中提取数据,以及如何使用JavaScript显示这些数据。

      XML数据源对象DSO是一个微软ActiveX控件,构建在微软IE4以后的版本上。这个对象允许你把一个外部的XML文件或者嵌入HTML文件中的内容提取到HTML页面中。

      你可以在一个Web页面中使用XML - DSO从一个外部XML文件中选取内容,从嵌入Web页面的XML中提取XML数据,然后使用JavaScript操作这些数据。然而,并不建议在Internet中使用这个对象,因为DSO只能工作在MSIE 4以上的浏览器中,因此这可能会带来一些兼容性问题。 所以,在企业内部网使用XML-DSO是很合适的。

      开始

      为了初始化XML - DSO对象,我们使用<OBJECT>标记。 用于XML-DSO的CLASSID是:

        CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39

      这ID唯一标识XML-DSO。使用下面的代码在一个Web页面中初始化这个控件:

      <OBJECT ID="SomeID" CLASSID="CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39"></OBJECT>

      虽然大部分对象需要许多参数与之相关联,但是XML-DSO不需要任何参数。

      使用一个XML数据岛析取数据

      首先,通过使用<XML>标记包含一个XML数据岛。其次,给它分配一个ID,xmldb --以备以后使用。 数据实际上是使用HTML标记:<ALT>,<SPAN>,<DIV>等等提取的。代码列表1中的代码使用了<SPAN>标记。datasrc属性指定了你想从中提取数据的那个数据岛。datafld属性指定了你想要的数据的XML标记。所以,第一个<SPAN>提取名称,而第二<SPAN>提取性别。

      代码列表1:

    <!-- example1.htm -->
    <html>
    <head>
    <title>XML DSO-example1.htm</title>
    </head>
    <body bgcolor="#FFFFFF">
    <xml id="xmldb">
    <db>
    <member>
    <name>Premshree Pillai<name>
    <sex>male</sex>
    </member>
    <member>
    <name>Vinod</name>
    <sex>male</sex>
    </member>
    </db>
    </xml>

    <span datasrc="#xmldb" datafld="name"<</span>
    <br>
    <span datasrc="#xmldb" datafld="sex"></span>

    </body>
    </html>  

      注意这段代码没有初始化一个XML-DSO对象。这是因为XML数据岛的使用中已经隐式地创建了一个。输出应为:
      
      Premshree Pillai
      male

      注意在XML数据岛中有两个<name>和<sex>标记。使用这个方法,你只能提取这些标记中的第一个实例。代码列表2中的代码使用<TABLE>标记提取所有的实例:

      输出将是:
       
         Name     Sex 
         -----------------------------------
         Premshree Pillai  male 
         Vinod      male 

      在代码列表2中,<TABLE>标记使用<TD>标记内的<DIV>标记提取数据。表格将自动重复<member>(<name>和<sex>的母标记)的每个实例。

      代码列表2:


    <!-- example2.htm -->
    <html>
    <head>
    <title>XML DSO-example2.htm</title>
    </head>
    <body bgcolor="#FFFFFF">

    <xml id="xmldb">
    <db>
    <member>
    <name>Premshree Pillai<name>
    <sex>male</sex>
    </member>
    <member>
    <name>Vinod</name>
    <sex>male</sex>
    </member>
    </db>
    </xml>

    <table datasrc="#xmldb" border="1">
    <thead>
    <th>Name</th>
    <th>Sex</th>
    </thead>
    <tr>
    <td><div datafld="name"></div></td>
    <td><div datafld="sex"></div></td>
    </tr>
    </table>
    </body>
    </html>

    使用外部XML文件提取数据

      为了使用XML-DSO加载一个外部XML文件,你必须显式的包含这个对象并且使用一些JavaScript。

      首先创建一个XML-DSO对象,使用ID myXML。添加宽度和高度属性到<OBJECT>标记中,然后设置它们的值为0。这保证XML-DSO对象不会占据你的Web页面的任何空间。

      其次,使用datasrc创建一个象myXML一样的表--类似于代码列表2中一样。代码使用<DIV>标记(在TD标记之)提取数据,使用datafld作为第一栏的信息,并且使用URL作为第二栏。添加<SCRIPT>标记,因为在这里,外部的XML使用Java脚本显式地声明你想要加载的XML文件。

      设置变量xmlDso为myXML.XMLDocument。myXML引用你已经创建的对象。接下来,使用XML-DSO的load()方法加载example3.xml。文件example3.xml连接到对象myXML上。


    <!-- example3.xml -->
    <?xml version="1.0" ?>
    <ticker>
    <item>
    <message>JavaScript Ticker using XML DSO</message>
    <URL>http://someURL.com</URL>
    </item>
    </ticker> 

      现在,研究一下下面的HTML页面:


    <!-- example3.htm -->
    <html>
    <head>
    <title>XML DSO-example3.htm</title>
    <script language="JavaScript">
    function load() {
    var xmlDso=myXML.XMLDocument;
    xmlDso.load("example3.xml");
    }
    </script>
    </head>
    <body bgcolor="#FFFFFF" onLoad="load()">

    <object id="myXML" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39"
    width="0" height="0"></object>

    <table datasrc="#myXML" border="1">
    <thead>
    <th>Message</th>
    <th>URL</th>
    </thead>
    <tr>
    <td><div datafld="message"></div></td>
    <td><div datafld="URL"></div></td>
    </tr>
    </table>

    </body>
    </html> 

      输出应是:

       Message URL
       JavaScript Ticker using XML DSO http://someURL.com

      上面的脚本非常特殊化。下面给出一个更一般的脚本:


    <script language="JavaScript">
    var xmlDso;
    function load(xmlFile, objName) {
    eval('xmlDso='+objName+'.XMLDocument');
    xmlDso.load(xmlFile);
    }
    </script>
    Now, to load any XML file use:
    load("SomeXMLFile.xml","anyXmlDsoObject");

    使用XML-DSO和JavaScript

      假设你有一个包含姓名、电子邮件地址和电话号码的XML文件。你想使用它构建一个应用程序,显示每个人的档案--一次显示一个。用户将使用"Next"和"Previous"按钮浏览每个人的数据。Javascript可以帮助你实现这个目的。

      下面的代码使用记录集方法把文件中所有的数据保存到一个变量memberSet中。moveNext()方法指向下一个数据项(下一行)。脚本然后载入XML文件example4.xml,把记录保存到变量memberSet中。第一个记录将被显示,但是memberSet.moveNext()指向文件中相对于前一个指定数据的下一个记录。


    <!-- example4.xml -->
    <?xml version="1.0" ?>
    <myDB>
    <member>
    <name>Premshree Pillai</name>
    <sex>male</sex>
    </member>
    <member>
    <name>Vinod</name>
    <sex>male</sex>
    </member>
    <member>
    <name>Santhosh</name>
    <sex>male</sex>
    </member>
    </myDB> 

      这里是相应的HTML文件:


    <!-- example4.htm -->
    <html>
    <head>
    <title>XML DSO-example4.htm</title>
    <script language="JavaScript">
    function load() {
    var xmlDso=myDB.XMLDocument;
    xmlDso.load("example4.xml");

    /* Get the complete record set */
    var memberSet=myDB.recordset;

    /* Go to next data */
    memberSet.moveNext();
    }
    </script>
    </head>
    <body bgcolor="#FFFFFF" onLoad="load()">

    <object id="myDB" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39"
    width="0" height="0"></object>

    <span datasrc="#myDB" datafld="name"></span>

    </body>
    </html> 

      输出应是:

       Vinod

      下面给出更多使用JavaScript操作XML-DSO的方法:

       · movePrevious(): 指向前一个数据项。

       · moveFirst(): 指向第一个数据项。

       · moveLast(): 指向最后一个数据项。

       · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。
    使用XML-DSO和JavaScript

      假设你有一个包含姓名、电子邮件地址和电话号码的XML文件。你想使用它构建一个应用程序,显示每个人的档案--一次显示一个。用户将使用"Next"和"Previous"按钮浏览每个人的数据。Javascript可以帮助你实现这个目的。

      下面的代码使用记录集方法把文件中所有的数据保存到一个变量memberSet中。moveNext()方法指向下一个数据项(下一行)。脚本然后载入XML文件example4.xml,把记录保存到变量memberSet中。第一个记录将被显示,但是memberSet.moveNext()指向文件中相对于前一个指定数据的下一个记录。


    <!-- example4.xml -->
    <?xml version="1.0" ?>
    <myDB>
    <member>
    <name>Premshree Pillai</name>
    <sex>male</sex>
    </member>
    <member>
    <name>Vinod</name>
    <sex>male</sex>
    </member>
    <member>
    <name>Santhosh</name>
    <sex>male</sex>
    </member>
    </myDB>  

      这里是相应的HTML文件:


    <!-- example4.htm -->
    <html>
    <head>
    <title>XML DSO-example4.htm</title>
    <script language="JavaScript">
    function load() {
    var xmlDso=myDB.XMLDocument;
    xmlDso.load("example4.xml");

    /* Get the complete record set */
    var memberSet=myDB.recordset;

    /* Go to next data */
    memberSet.moveNext();
    }
    </script>
    </head>
    <body bgcolor="#FFFFFF" onLoad="load()">

    <object id="myDB" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39"
    width="0" height="0"></object>

    <span datasrc="#myDB" datafld="name"></span>

    </body>
    </html> 

      输出应是:

       Vinod

      下面给出更多使用JavaScript操作XML-DSO的方法:

       · movePrevious(): 指向前一个数据项。

       · moveFirst(): 指向第一个数据项。

       · moveLast(): 指向最后一个数据项。

       · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。

      initTicker()首先检查是否有IE 4+。如果浏览器是IE4+,这个XML文件被作为一个参数被传递并载入。如果定时器失败了,那么调用xmlDsoTicker()函数。xmlDsoTicker()除了xmlFile参数以外,和initTicker()有相同的参数,因为XML文件已经被载入。xmlDsoTicker()检查变量counter(初始值为maxMsgs)是否小于maxMsgs-1。如果是,moveNext()方法指向tickerSet中下一个数据项。

      HTML页面的BODY包含下面的代码:


    <a href="" datasrc="#ticker" datafld="URL" class="tickerStyle">
    <span datasrc="#ticker" datafld="message"></span>
    </a> 


    此主题相关图片如下:
    按此在新窗口浏览图片
    图1:定时器应用程序显示输出。

      在这段代码中,<A>标记把XML文件的URL作为它的datafld。<SPAN>标记把XML文件的信息作为它的datafld。这个信息在<SPAN>元素中显示,然后整个信息可以通过这段信息相应的URL连接。

      这样,<A>和<SPAN>元素包含下一个数据项(URL和信息)。在一段延迟以后,<A>和<SPAN>指向下一个数据。只要counter<maxMsgs-1(计数器每次递增),这个操作就会发生。如果counter<maxMsgs-1是假,计数器就被设置为0,然后指向tickerSet中的第一个数据项。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/1/27 12:46:00
     
     johnwang 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:67
      门派:XML.ORG.CN
      注册:2005/10/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给johnwang发送一个短消息 把johnwang加入好友 查看johnwang的个人资料 搜索johnwang在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看johnwang的博客2
    发贴心情 
    怎么第一个就有问题啊
    刚刚开始学.
    <html>
    <head>
    <title>XML DSO-example2.htm</title>
    </head>
    <body bgcolor="#FFFFFF">

    <xml id="xmldb">
    <db>
    <member>
    <name>Premshree Pillai<name>
    <sex>male</sex>
    </member>
    <member>
    <name>Vinod</name>
    <sex>male</sex>
    </member>
    </db>
    </xml>

    <table datasrc="#xmldb" border="1">
    <thead>
    <th>Name</th>
    <th>Sex</th>
    </thead>
    <tr>
    <td><div datafld="name"></div></td>
    <td><div datafld="sex"></div></td>
    </tr>
    </table>

    </body>
    </html>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/10/13 16:57:00
     
     robin21_cn 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:13
      积分:111
      门派:XML.ORG.CN
      注册:2005/3/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给robin21_cn发送一个短消息 把robin21_cn加入好友 查看robin21_cn的个人资料 搜索robin21_cn在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看robin21_cn的博客3
    发贴心情 
    有问题吗?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/10/20 15:16:00
     
     比尔熊 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:67
      门派:XHTML.ORG.CN
      注册:2005/10/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给比尔熊发送一个短消息 把比尔熊加入好友 查看比尔熊的个人资料 搜索比尔熊在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看比尔熊的博客4
    发贴心情 
    不错, 顶
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/10/21 8:21:00
     
     studyism 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:114
      门派:XML.ORG.CN
      注册:2005/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给studyism发送一个短消息 把studyism加入好友 查看studyism的个人资料 搜索studyism在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看studyism的博客5
    发贴心情 
    真的很不错,受教育啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/10/23 18:50:00
     
     benny987 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:54
      门派:XML.ORG.CN
      注册:2005/11/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给benny987发送一个短消息 把benny987加入好友 查看benny987的个人资料 搜索benny987在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看benny987的博客6
    发贴心情 
    very good ,thanks for your share
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/10 11:47:00
     
     bigfly 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:18
      积分:128
      门派:XML.ORG.CN
      注册:2005/11/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给bigfly发送一个短消息 把bigfly加入好友 查看bigfly的个人资料 搜索bigfly在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看bigfly的博客7
    发贴心情 
    3Q v m~~~~~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/14 12:07:00
     
     simeon 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:58
      门派:XML.ORG.CN
      注册:2005/12/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给simeon发送一个短消息 把simeon加入好友 查看simeon的个人资料 搜索simeon在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看simeon的博客8
    发贴心情 
    好文章常阅读,嘿嘿。。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/16 16:12:00
     
     xueran 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:64
      门派:XML.ORG.CN
      注册:2005/5/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xueran发送一个短消息 把xueran加入好友 查看xueran的个人资料 搜索xueran在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xueran的博客9
    发贴心情 
    第一个有问题,读不出记录。把XML段中,删除一个记录就能读出来。
    但是外部调用的时候,没有问题。。。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/22 22:22:00
     
     aassddff 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:60
      门派:XML.ORG.CN
      注册:2006/2/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给aassddff发送一个短消息 把aassddff加入好友 查看aassddff的个人资料 搜索aassddff在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看aassddff的博客10
    发贴心情 
    example1.htm 中的第一个记录,<name>Premshree Pillai<name>
    错了
    应该是<name>Premshree Pillai</name>
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/2/20 22:50:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/15 11:22:56

    本主题贴数11,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    109.375ms