posts - 40,  comments - 7,  trackbacks - 0

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

          posted on 2006-08-16 15:23 Lansing 閱讀(436) 評論(0)  編輯  收藏 所屬分類: XML

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          歡迎探討,努力學習Java哈

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大荔县| 营口市| 彭阳县| 常宁市| 栾川县| 丰县| 图木舒克市| 湟中县| 武隆县| 石城县| 茂名市| 墨脱县| 武威市| 东辽县| 灵璧县| 库车县| 观塘区| 黎平县| 永寿县| 佛冈县| 全椒县| 临海市| 车致| 林周县| 内黄县| 怀仁县| 洛浦县| 双桥区| 邹城市| 内丘县| 腾冲县| 灵宝市| 宁陕县| 会昌县| 德江县| 琼结县| 虎林市| 丽水市| 临沭县| 巩义市| 图片|