熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

利用XSL和ASP實現XML文檔在線編輯

2013-11-13 10:27:51  來源: .NET編程 

  本文通過一個詳細的例子來闡述了在線編輯XML文檔數據的方法由於Netscape對XML的支持比較弱因此要實現跨平台的數據交換數據的處理必須在服務器端進行要編輯XML文檔首先要做的事情就是怎樣把這些數據提取並顯示給訪問者XSL為我們顯示XML文件提供了一個很好的解決方案下面的例子就是利用XSL樣式單把XML文檔顯示出來供用戶進行編輯然後再把編輯後的數據提交到服務器在服務器端進行數據的更新這裡采用ASP(Active Server Pages)來完成我們的任務
  
  首先載入我們要進行編輯的XML文檔利用微軟的文檔對象模型(Microsoft XMLDOM Object)和XSLXML文檔就可以在服務器端轉換成可以在客戶端顯示的HTML文件內容下面先看看我們使用的XML和XSL文件是什麼樣子的
  
  XML文件UserDataxml
  
  <?xml version= encoding=gb?>
  <! edited with XMLSPY v rel U () by Dicky (AppleS Eden)
  <UserInfo>
  <Field ID=Name TabOrder=
  <FieldValue>Dicky</FieldValue>
  </Field>
  <Field ID=Sex TabOrder=
  <FieldValue>Male</FieldValue>
  </Field>
  <Field ID=UnitName TabOrder=
  <FieldValue>ShangHai Ateam Company</FieldValue>
  </Field>
  <Field ID=Address TabOrder=
  <FieldValue>ShangHaiZhongShan West Road #Room A</FieldValue>
  </Field>
  <Field ID=Tel TabOrder=
  <FieldValue></FieldValue>
  </Field>
  <Field ID=EMail TabOrder=
  <FieldValue>AppleBBS@GMailCom</FieldValue>
  </Field>
  </UserInfo>
  
  XSL文件UserDataxsl
  
  <?xml version= encoding=gb?>
  <! edited with XMLSPY v rel U () by Dicky (AppleS Eden)
  <xsl:stylesheet xmlns:xsl=xsl
  <xsl:template match=/
  <html>
  <meta httpequiv=ContentType content=text/html; charset=gb/>
  <body>
  <form method=post action=EditUserDataasp
  <h>Edit UserInfo</h
  <table border= cellpadding=
  <xsl:foreach select=UserInfo/Field
  <tr>
  <td>
  <xsl:valueof select=@ID/>
  </td>
  <td>
  <input type=text
  <xsl:attribute name=ID><xsl:valueof select=@ID/></xsl:attribute>
  <xsl:attribute name=Name><xsl:valueof select=@ID/></xsl:attribute>
  <xsl:attribute name=Value><xsl:valueof select=FieldValue/></xsl:attribute>
  </input>
  </td>
  </tr>
  </xsl:foreach>
  </table>
  <br/>
  <input type=submit id=btnSubmit name=btnSubmit value=Edit/>
  </form>
  </body>
  </html>
  </xsl:template>
  </xsl:stylesheet>
  
  XSL文件使用了XSLforeach元素的來遍歷整個XML文件XML文件裡每個field元素的id屬性和HTML表單的文本輸入框的idname相對應這樣HTML表單的文本輸入框就顯示出了XML文件的元素值此文件負責XML文檔在服務器端的轉換以便能在各種浏覽器上顯示
  
  下面是關鍵的程序它實現打開和更新XML文檔的功能並根據表單的提交與否來決定是否進行更新它包含了兩個函數loadXMLFile負責載入和轉換要顯示的XML文件updateXML函數負責更新XML文件
  
  EditUserDataasp程序如下:
  
  <%
  
  定義函數 LoadXMLFile()接收二個參數
  strXMLFile XML 文件的路徑和文件名字
  strXSLFilee XSL 文件的路徑和文件名字
  
  Function LoadXMLFile(strXMLFile strXSLFile)
  Declare local variables
  Dim objXML
  Dim objXSL
  實例化 XMLDOM 對象以便載入 XML 文件
  Set objXML = ServerCreateObject(MicrosoftXMLDOM)
  關掉文件異步載入模式
  objXMLAsync = False
  載入 XML 文件!
  objXMLLoad(strXMLFile)
  實例化 XMLDOM 對象以便載入 XSL 文件
  Set objXSL = ServerCreateObject(MicrosoftXMLDOM)
  關掉文件異步載入模式
  objXSLAsync = False
  載入 XSL 文件!
  objXSLLoad(strXSLFile)
  利用 XMLDOM 的 transformNode 方法把 XSL 樣式表應用到 XML 文檔然後輸出到客戶端
  ResponseWrite(objXMLTransFormNode(objXSL))
  End Function
  
  函數 updateXML() 接收一個參數strXMLFile XML 文件的路徑和文件名
  
  Function UpdateXML(strXMLFile)
  聲明局部變量
  Dim objDom
  Dim objRoot
  Dim objField
  Dim x
  實例化 XMLDOM 對象
  Set objDOM = ServerCreateObject(MicrosoftXMLDOM)
  關掉文件異步載入模式
  objDomAsync = False
  載入 XML 文件
  objDomLoad strXMLFile
  設定根元素
  Set objRoot = objDomDocumentElement
  遍歷 FORM 集合並把提交的數據寫入 XML 文件
  For x = To RequestFormCount
  檢查提交的數據是否包含按鈕如果是忽略此數據
  If Instr(RequestFormKey(x)btn) = Then
  按照 XSL 查詢模式建立 objField 變量把表單的元素對應到 XML 文檔裡的相應元素[field_value]
  Set objField = objRootSelectSingleNode(Field[@ID= & RequestFormKey(x) & ]/FieldValue)
  把表單提交的數據和 XML 文檔裡的節點值對應起來
  objFieldText = RequestForm(x)
  End If
  Next
  保存編輯過的 XML 文件
  objDomSave strXMLFile
  釋放所有對對象的引用
  Set objDom = Nothing
  Set objRoot = Nothing
  Set objField = Nothing
  調用 LoadXMLFile 函數把新編輯後的 XML 文件用 UpdatedUserDataxsl 樣式單顯示到客戶端
  LoadXMLFile strXMLFileServerMapPath(UpdatedUserDataxsl)
  End Function
  
  檢查表單是否成功提交如提交更新 XML 文件否則轉到編輯狀態
  
  If RequestForm(btnSubmit) = Then
  LoadXMLFile ServerMapPath(UserDataxml)ServerMapPath(UserDataxsl)
  Else
  UpdateXML ServerMapPath(UserDataxml)
  End If
  %>
  
  當表單提交成功後我們用UpdatedUserDataxsl來顯示我們剛剛編輯的數據
  
  UpdatedUserDataxsl如下:
  
  <?xml version= encoding=gb?>
  <! edited with XMLSPY v rel U () by Dicky (AppleS Eden)
  <xsl:stylesheet xmlns:xsl=xsl
  <xsl:template match=/
  <html>
  <meta httpequiv=ContentType content=text/html; charset=gb/>
  <body>
  <h>Updated UserInfo</h
  <table border= cellpadding=
  <xsl:foreach select=UserInfo/Field
  <tr>
  <td>
  <xsl:valueof select=@ID/>
  </td>
  <td>
  <xsl:valueof select=FieldValue/>
  </td>
  </tr>
  </xsl:foreach>
  </table>
  <form>
  <input type=button value=Go Back onclick=historygo()/>
  </form>
  </body>
  </html>
  </xsl:template>
  </xsl:stylesheet>
  
  以上只是XML跨平台應用的一個簡單的例子結合具體的需求我們可以編寫功能更強大的程序來完成我們更負雜的工作所有程序在Windows En+IIS +IE+MSXMLDll環境下調試通過
From:http://tw.wingwit.com/Article/program/net/201311/13728.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.