精华区 [关闭][返回]

当前位置:月光软件>>讨论区精华>>〖软件开发〗>>● ASP>>★ASP的同类★>>XML>>ASP 与 XML (三)

主题:ASP 与 XML (三)
发信人: dongbao(爱, 是永恒)
整理人: dongbao(2001-03-10 11:45:40), 站内信件
IE 5.0如何支援XML呢?
IE 5.0支援XML,包括IE 5.0 XML Data Islands和Databinding,以及XSL(eXtensible Stylesheet Language)Stylesheets。

Databinding

將XML資料透過DSO(Data Source Object),可以將資料Databinding到html標記碼上。方法如下:

²         datasrc:定義資料來源。

²         datafld:定義欄位。

使用<xml src="booksorder.xml">方法以載入一個XML檔案booksorder.xml,如下:

<xml src="booksorder.xml" id="xmldso1" JavaDSOCompatible="true"></xml>

接著於<table>中由datasrc定義資料來源為剛才定義之DSO,如下:

<table …datasrc="#xmldso1"> 

每一個<span>中由datafld定義欄位為TITLE、AUTHOR、PUBLISHER、PRICE、QUANTITY,如下:

<table id="table" border="1" datasrc="#xmldso1"> 



<td valign="top"><span datafld="TITLE" dataformatas="HTML"></span></td> 

<td valign="top"><span datafld="AUTHOR" dataformatas="HTML"></span></td>



譬如HTML程式碼如下:

<table id="table" border="1" datasrc="#xmldso1"> 

<thead align="left"> 

      <th>Title</th> 

      <th>Author</th> 

      <th>Publisher</th> 

      <th>Price</th> 

      <th>Qty</th> 

</thead> 

<tr> 

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

  <td valign="top"><span datafld="AUTHOR"></span></td> 

  <td valign="top"><span datafld="PUBLISHER"></span></td> 

  <td valign="top" align="right"><span datafld="PRICE"></span></td> 

  <td valign="top" align="right"><span datafld="QUANTITY"></td> 

 </tr> 

 

</table> 

 

 <A Href="booksorder.xml" Target="_blank">XML Data 

 

<xml src="booksorder.xml" id="xmldso1" JavaDSOCompatible="true"></xml>  

其中所載入的booksorder.xml檔案內容如下:

<?xml version="1.0" encoding="BIG5" standalone="yes" ?> 

<booksorder>

  <book genre="網站設計">

    <TITLE>ASP網站熱門應用技術</TITLE>

    <AUTHOR>周世雄</AUTHOR>

    <QUANTITY>12</QUANTITY>

    <PRICE>580</PRICE>

    <PUBLISHER>華彩</PUBLISHER>

  </book>

  <book genre="網站設計">

    <TITLE>微軟熱門Web技術速成班</TITLE>

    <AUTHOR>周世雄</AUTHOR>

    <QUANTITY>10</QUANTITY>

    <PRICE>450</PRICE>

    <PUBLISHER>松崗</PUBLISHER>

  </book>



</booksorder>

又譬如HTML程式碼,如下:

<html>

<table id="table" datasrc="#xmldso1"> 

<tr><td valign="top"><div datafld="TITLE" dataformatas="HTML"></div></td></tr> 

<tr><td valign="top"><div datafld="AUTHOR" dataformatas="HTML"></div></td></tr> 

<tr><td valign="top"><div datafld="PUBLISHER" dataformatas="HTML"></div></td></tr> 

<tr><td valign="top"><div datafld="PRICE"></div></td></tr> 

<tr><td valign="top"><div datafld="QUANTITY"></div></td></tr> 

<tr><td ><hr/></td></tr> 

</table> 

 

 <A Href="booksorder.xml" Target="_blank">XML Data 

 

<xml src="booksorder.xml" id="xmldso1" JavaDSOCompatible="true"></xml>

</html>  

每一個<DIV>中由datafld定義欄位為TITLE、AUTHOR、PUBLISHER、PRICE、QUANTITY。

階層式XML 

IE 5.0也支援階層式XML,譬如XML檔案內容如下:

<?xml version="1.0" encoding="BIG5" standalone="yes" ?> 

<ALLORDERID>

<ORDER>

<ORDERID>010314</ORDERID>

<ITEM>

    <ProductName>ASP網站熱門應用技術 </ProductName>

    <Quantity>6</Quantity>

    <UnitPrice>580</UnitPrice>  

</ITEM>

<ITEM>

    <ProductName>微軟熱門Web技術速成班</ProductName>

    <Quantity>6</Quantity>

    <UnitPrice>450</UnitPrice>  

</ITEM>

</ORDER>

<ORDER>

<ORDERID>010529</ORDERID>

<ITEM>

    <ProductName>動態網頁設計 99 招 PART 2</ProductName>

    <Quantity>6</Quantity>

    <UnitPrice>430</UnitPrice>  

</ITEM>

</ORDER>

<ORDER>

<ORDERID>010212</ORDERID>

<ITEM>

    <ProductName>微軟熱門Web技術速成班</ProductName>

    <Quantity>2</Quantity>

    <UnitPrice>450</UnitPrice>  

</ITEM>

<ITEM>

    <ProductName>ASP網站熱門應用技術 </ProductName>

    <Quantity>9</Quantity>

    <UnitPrice>580</UnitPrice>  

 </ITEM>

</ORDER>



</ALLORDERID>

讓我們看一個例子,譬如HTML程式碼如下:

<html>

 

<table datasrc="#xmldso"> 

<tr> 

<td>ORDERID: <span datafld="ORDERID"></span></td> 

</tr> 

<tr><td>

 

<table class="order" border="1" datasrc="#xmldso" datafld="ITEM"> 

<thead><th>產品</th><th>價格</th><th>數量</th></thead> 

<tr><td><span datafld="ProductName"></span></td> 

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

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

</tr> 

</table> 

 

</td></tr>

</table>

 

<xmp id="error"></xmp> 

<A Href="booksorder3.xml" Target="_blank">XML Data 

 

<xml src="booksorder3.xml" id="xmldso" JavaDSOCompatible="true"></xml>

 

</html>

使用<xml src="booksorder3.xml">方法以載入一個XML檔案booksorder3.xml,接著於<table>中由datasrc定義資料來源為剛才定義之DSO,<span>中由datafld定義欄位為ORDERID;再於所包括的<table>中由datasrc定義資料來源為剛才定義之DSO,每一個<span>中由datafld定義欄位為ProductName、UnitPrice、Quantity。

Recordset

將XML資料透過DSO(Data Source Object),可以將資料Databinding到html標記碼上,Data Source Object可使用Recordset方法如下:

&sup2;         rs.MoveNext():移到下一筆資料。

&sup2;         rs.MovePrevious():移到上一筆資料。

&sup2;         rs.MoveFirst():移到第一筆資料。

&sup2;         rs.MoveLast():移到第末筆資料。

&sup2;         rs.(“欄位名稱”):欄位值。

&sup2;         rs.AddNew():新增。

&sup2;         rs.Update():修改。

&sup2;         rs.Delete():刪除。

HTML程式碼如下:

<html>

<table id="table" border="1" datasrc="#xmldso1"> 

<thead align="left"> 

      <th>Title</th> 

      <th>Author</th> 

      <th>Publisher</th> 

      <th>Price</th> 

      <th>Qty</th> 

</thead> 

<tr> 

  <td valign="top"><span datafld="TITLE" dataformatas="HTML"></span></td> 

  <td valign="top"><span datafld="AUTHOR" dataformatas="HTML"></span></td> 

  <td valign="top"><span datafld="PUBLISHER" dataformatas="HTML"></span></td> 

  <td valign="top" align="right"><span datafld="PRICE"></span></td> 

  <td valign="top" align="right"><input type="text" size="10" datafld="QUANTITY" dataformatas="HTML" onblur="DoCalc();"/></td> 

 

</tr> 

<tfoot> 

      <th></th> 

      <th></th> 

      <th></th> 

      <th align="right">Total</th> 

      <th><span id="total"></span></th> 

</tfoot> 

</table> 

 

<xmp id="error"></xmp> 

 

<A Href="booksorder.xml" Target="_blank">XML Data 

 

<xml src="booksorder.xml" id="xmldso1" JavaDSOCompatible="true"></xml>  

  

<script>  

function DoCalc() 

{  

    doc = xmldso1.XMLDocument;  

    if(doc.documentElement == null) 

        error.innerText = doc.parseError.reason;  

    else  

{  

    var rs = xmldso1.recordset;  

    rs.MoveFirst();  

    var t= 0;  

    while(! rs.eof) 

    {  

        t+= rs("QUANTITY")* rs("PRICE");  

        rs.MoveNext();  

    }  

    t = parseInt(t*100)/100;  

    tspan = document.all("total");  

    if(tspan) 

    {  

        tspan.innerText = t;  

    }  

    return t;  

}  

}  

  

</script>    

</html>

當於Qty欄位輸入後離開時將執行DoCalc()函數,使用rs.MoveFirst()方法移到第一筆資料和rs.MoveNext()方法移到下一筆資料,由rs("QUANTITY")* rs("PRICE")以計算總和。

<object…>

除了如上例直接由<xml src=…>載入一個XML檔案的方法外,也可以使用DSO(Data Source Object)ActiveX Control和使用doc.load("booksorder.xml")方法以載入一個XML檔案。

使用DSO(Data Source Object)ActiveX Control方法以載入一個XML檔案,如下:

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

<script for="window" event="onload">

    xmldso1.JavaDSOCompatible = true;

    var doc = xmldso1.XMLDocument;

    doc.load("booksorder.xml");

    if(doc.parseError.errorCode != 0)

        error.innerText = doc.parseError.reason;

</script>

讓我們再看一個例子,譬如HTML程式碼如下:

<html>

<body>

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

</object>

 

<script for="window" event="onload">

    xmldso1.JavaDSOCompatible = true;

    var doc = xmldso1.XMLDocument;

    doc.load("booksorder.xml");

    if(doc.parseError.errorCode != 0)

        error.innerText = doc.parseError.reason;

</script>

 

<table>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="TITLE"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="AUTHOR"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="PUBLISHER"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="PRICE"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="QUANTITY"></div></td></tr>

<tr><td ><hr/></td></tr>

</table>

 

<xmp id="error"></xmp>

<button onclick="xmldso1.recordset.moveprevious();">上一筆</button>

<button onclick="xmldso1.recordset.movenext();">下一筆</button>

<A Href="booksorder.xml" Target="_blank">XML Data

</body>

</html>

按下「下一筆」按鈕時,顯示下一筆資料。

說明如下,首先使用一個XML之DSO(Data Source Object)ActiveX Control,如下:

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

</object>

var doc = xmldso1.XMLDocument定義doc為剛才DSO之XML文件,以使用XML Parser,再使用doc.load("booksorder.xml")方法以載入一個XML檔案booksorder.xml,由parseError.errorCode可以得知是否載入錯誤,若有錯誤,由parseError.errorCode得知錯誤碼,若不等於0表示有錯誤,parseError.reason得知錯誤原因。

接著於每一個<div>中由datasrc定義資料來源為剛才定義之DSO,由datafld定義欄位為TITLE、AUTHOR、PUBLISHER、PRICE、QUANTITY,如下:

<table>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="TITLE"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="AUTHOR"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="PUBLISHER"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="PRICE"></div></td></tr>

<tr><td valign="top"><div datasrc="#xmldso1" datafld="QUANTITY"></div></td></tr>

<tr><td ><hr/></td></tr>

</table>

即可顯示一筆XML資料。

按下「下一筆」按鈕時,使用recordset.movenext()方法,顯示下一筆資料;按下「上一筆」按鈕時,使用recordset.moveprevious()方法,顯示上一筆資料,如下:

<button onclick="xmldso1.recordset.moveprevious();">上一筆</button>

<button onclick="xmldso1.recordset.movenext();">下一筆</button>

新增修改刪除

讓我們再看一個新增修改刪除的例子,譬如HTML程式碼如下:

<html>

<table border="2" cellpadding="3" align="left" bordercolordark="#000000" bordercolorlight="#C0C0C0"> 

<tr><td width="100">TITLE</td> 

<td><input type="text" size="50" datasrc="#xmldso" datafld="TITLE"/></td> 

</tr><tr><td width="100">AUTHOR</td> 

<td><input type="text" size="50" datasrc="#xmldso" datafld="AUTHOR"/></td> 

</tr><tr><td width="100">PUBLISHER</td> 

<td><input type="text" size="50" datasrc="#xmldso" datafld="PUBLISHER"/></td> 

</tr><tr><td width="100">PRICE</td> 

<td><input type="text" size="50" datasrc="#xmldso" datafld="PRICE" /></td> 

</tr><tr><td width="100">QUANTITY</td> 

<td><input type="text" size="50" datasrc="#xmldso" datafld="QUANTITY" /></td> 

</tr> 

</table> 

 

<br clear="all"/> 

 

<button onclick="xmldso.recordset.movefirst();">第一筆</button> 

<button onclick="xmldso.recordset.moveprevious();">上一筆</button> 

<button onclick="xmldso.recordset.movenext();">下一筆</button> 

<button onclick="xmldso.recordset.movelast();">最末筆</button> 

<button onclick="xmldso.recordset.AddNew();">新增</button> 

<button onclick="xmldso.recordset.Update();">修改</button> 

<button onclick="xmldso.recordset.Delete();">刪除</button>

 

<xmp id="error"></xmp> 

<A Href="booksorder.xml" Target="_blank">XML Data 

 

<xml src="booksorder.xml" id="xmldso" JavaDSOCompatible="true"></xml>

 

</html>

按下「第一筆」、「上一筆」、「下一筆」、「最末筆」、「新增」、「修改」、「刪除」按鈕時,使用movefirst()、moveprevious()、movenext()、movelast()、AddNew()、Update()、Delete()方法,如下:

<button onclick="xmldso.recordset.movefirst();">第一筆</button> 

<button onclick="xmldso.recordset.moveprevious();">上一筆</button> 

<button onclick="xmldso.recordset.movenext();">下一筆</button> 

<button onclick="xmldso.recordset.movelast();">最末筆</button> 

<button onclick="xmldso.recordset.AddNew();">新增</button> 

<button onclick="xmldso.recordset.Update();">修改</button> 

<button onclick="xmldso.recordset.Delete();">刪除</button>

Data Islands範例 

IE 5.0支援Data Islands,可於數個XML檔案中切換資料,譬如XML檔案內容如下:

<?xml version="1.0" encoding="BIG5" standalone="yes" ?> 

<bookstore>

  <book genre="網站設計">

    <title>ASP網站熱門應用技術</title>

    <author>

      <first-name>世雄</first-name>

      <last-name>周</last-name>

    </author>

    <price>580</price>

    <publisher>華彩</publisher>

  </book>

  <book genre="網站設計">

    <title>微軟熱門Web技術速成班</title>

    <author>

      <first-name>世雄</first-name>

      <last-name>周</last-name>

    </author>

    <price>450</price>

    <publisher>松崗</publisher>

  </book>

  <book genre="網頁設計">

    <title>動態網頁設計 99 招 PART 2</title>

    <title>動態網頁設計 99 招 PART 3</title>

    <author>

      <first-name>世雄</first-name>

      <last-name>周</last-name>

    </author>

    <price>430</price>

    <publisher>第三波</publisher>

  </book>

 

</bookstore>

XML檔案內容如下:

<?xml version="1.0" encoding="BIG5" standalone="yes" ?> 

<xml>

<book>

    <title>動態網頁設計 99 招 PART 2</title>

    <author>周世雄</author>

    <price>430</price>

    <publisher>第三波</publisher>

  </book>

<book>

    <title>動態網頁設計 99 招 PART 3</title>

    <author>周世雄</author>

    <price>430</price>

    <publisher>第三波</publisher>

  </book>

</xml>

學會了嗎?

WebFlow

筆者參予設計的WebFlow辦公室自動化流程系統軟體,也推出了Windows 2000版本,運用了Windows 2000的IIS 5.0、ADSI、COM+、Certificate Services等技術,有興趣的讀者可上網www.asp.com.tw下載試用。另外,探討IIS 5.0的新書「IIS 5.0超級網站速成班」也將出版。




----
    春日,阳光明媚的校园,她穿着那一袭纯白的连衣裙,沐浴着 
阳光,漫步于一片新绿之间。在金色的光芒中,她那乌黑的长发随风 
飘逸,那苍白的脸颊已被喜悦的红晕所遮掩。 
   我心翩翩 
   我是天使 
   是你的天使 
   我爱 
   我将要来你身边 
   与你共舞 
   ……  
 

[关闭][返回]






转载请注明:转载自 月光程序代码网 [ http://www.moon-soft.com ]