怎樣用XML和XSL來生成動(dòng)態(tài)頁面(2)_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:XML與HTML的結(jié)合(下)
      XML的嵌套處理 一般情況下,我們從數(shù)據(jù)庫中查詢得到的結(jié)果集可能很大,所以從服務(wù)器返回到客戶端時(shí),數(shù)據(jù)會(huì)被分成若干個(gè)頁面分別進(jìn)行傳遞。此時(shí),利用TABLE元素中的DATAPAGESIZE屬性可以指定每

      二、生成動(dòng)態(tài)xml

      一旦建立了xml格式,我們需要一種能夠?qū)⑵鋸臄?shù)據(jù)庫中動(dòng)態(tài)移植的方法。

      生成xml文檔相對(duì)來說比較簡(jiǎn)單,因?yàn)樗恍枰粋(gè)可以處理字符串的系統(tǒng)。我們建立了一個(gè)使用java servlet、enterprise javabean server、jdbc和rdbms(關(guān)系型數(shù)據(jù)庫管理系統(tǒng))的系統(tǒng)。

       

      • servlet通過把生成xml文檔的任務(wù)交給enterprise javabean (ejb)來處理產(chǎn)品信息請(qǐng)求。
      • ejb使用jdbc從數(shù)據(jù)庫里查詢所需的產(chǎn)品詳細(xì)信息。
      • ejb生成xml文件并把它傳遞給servlet。
      • servlet調(diào)用解析引擎,從xml文件和靜態(tài)的xsl樣式表中創(chuàng)建html輸出。

       

      (有關(guān)xsl應(yīng)用的其他信息,請(qǐng)參閱用xsl作為模板語言。)

      生成xml的例子

      在java中創(chuàng)建xml文檔字符串的真正代碼可以分成幾個(gè)方法和類。

      啟動(dòng)xml生成過程的代碼放在ejb方法里。這一實(shí)例會(huì)立即創(chuàng)建一個(gè)stringbuffer,以便存儲(chǔ)生成的xml字符串。

       

      stringbuffer xml = new stringbuffer();
      xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request));
      xml.append(product.toxml());
      xml.append(xmlutils.enddocument("browse");
      out.print(xml.tostring());

       

      后面的三個(gè)xml.append()變?cè)旧砭褪菍?duì)其他方法的調(diào)用。

      產(chǎn)生文件頭

      第一個(gè)附加方法調(diào)用xmlutils類來產(chǎn)生xml文件頭。我們的java servlet中的代碼如下:

       

      public static string begindocument(string stylesheet, string page)
      {
      stringbuffer xml = new stringbuffer();
      xml.append("<?xml version=\"1.0\"?>\n")
      .append("<?xml-stylesheet href=http://www.wf0088.com/\"")
      .append(stylesheet).append("\"")
      .append(" type =\"text/xsl\"?>\n");
      xml.append("<").append(page).append(">\n");
      return xml.tostring();
      }

       

      這段代碼生成了xml文件頭。<?xml>標(biāo)簽把本文件定義為支持1.0版本的xml文件。第二行代碼指向用以顯示數(shù)據(jù)的正確樣式表的位置。最后包括進(jìn)去的是項(xiàng)級(jí)標(biāo)簽(本實(shí)例中為<browse>)。在文件末尾,只有<browse>標(biāo)簽需要被關(guān)閉。

       

      <?xml version="1.0"?> <?xml-stylesheet href="http://www.wf0088.com/browse_find/browse.xsl" type="text/xsl"?> <browse>

       

      填入產(chǎn)品信息

      完成了文件頭后,控制方法會(huì)調(diào)用java對(duì)象來產(chǎn)生它的xml。本例中調(diào)用的是product對(duì)象。product對(duì)象使用兩個(gè)方法來產(chǎn)生它的xml表示。第一個(gè)方法toxml()通過產(chǎn)生<product>和</product>標(biāo)簽來建立product節(jié)點(diǎn)。然后它會(huì)調(diào)用internalxml(),這樣就能提供產(chǎn)品xml所需的內(nèi)容。internalxml()是一系列的stringbuffer.append()調(diào)用。stringbuffer也被轉(zhuǎn)換成字符串并返回給控制方法。

       

      public string toxml()
      {
      stringbuffer xml = new stringbuffer("<product>\n");
      xml.append(internalxml());
      xml.append("</product>\n");
      return xml.tostring();
      }

      public string internalxml()
      {
      stringbuffer xml = new
      stringbuffer("\t")
      .append(producttype).append("\n");
      xml.append("\t").append(idvalue.trim())
      .append("\n");
      xml.append("\t").append(idname.trim())
      .append("\n");
      xml.append("\t").append(page.trim())
      .append("\n");

      xml.append("\t").append(amount).append("\n");
      xml.append("\t").append(vendor).append("\n");
      xml.append("\t\n");
      xml.append("\t").append(pubdesc).append("\n");
      xml.append("\t").append(vendesc).append("\n");
      return xml.tostring();
      }

       

       

      關(guān)閉文件

      最后,xmlutils.enddocument()方法被調(diào)用。這個(gè)調(diào)用關(guān)閉xml標(biāo)簽(本例中為),并最終完成架構(gòu)好的xml文件。來自控制方法的整個(gè)stringbuffer也轉(zhuǎn)換成字符串,并返回給處理最初http請(qǐng)求的servlet。

      分享:如何用XSLT把ADO記錄集轉(zhuǎn)換成XML
      孟憲會(huì) 由于XML(可擴(kuò)展標(biāo)記語言:eXtensible Markup Language)真正的平臺(tái)無關(guān)性,它正在逐漸成為數(shù)據(jù)傳輸?shù)闹饕橘|(zhì)。XML是一種自描述的語言,數(shù)據(jù)本身就已經(jīng)包含了元數(shù)據(jù),即關(guān)于數(shù)據(jù)本身的

      來源:模板無憂//所屬分類:Xml教程/更新時(shí)間:2009-05-26
      相關(guān)Xml教程