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

利用.NET FileStreams將DTD插入XML文件中

2013-11-15 12:49:51  來源: ASP編程 

  盡管你可以通過schema來驗證和創建XML文件但相比之下使用NET類則更加方便它會帶給你更多使用上的靈活性

  技術工具箱 VBNET XML ADONET

  ADONET提供了一種很好的功能來處理dataset和XML之間的轉換你可以通過VSNET在XML中形象地創建dataset schema同一個document type definition(DTD)一樣schema允許你驗證和創建XML文件但相比之下使用NET類則更加方便它會帶給你更多使用上的靈活性

  然而DTD並非毫無用處它是廣泛應用於非NET程序中的Internet和數據轉換的World Wide Web Consortium(WC)標准為了能夠實現向後(即非NET)兼容性NET Framework中包含了通過DTDs來驗證XML的性能

  然而就算你需要在一個由Web程序生成的輸出XML文件中包含一個DTD這種情況也是不存在的或者即使存在也缺乏可參考的標准文件

  而SystemIOFileStream對象能幫你解決這個問題你可以創建一個FileStream並將DTD插入你的XML文件中一個FileStream又引出兩種FileStream――它們分別從DTD和dataset中得到你可以用DTD文件和一些范例XML來設計DataSet schemaVSNET的Visual Data Set設計界面使這個工作變得很簡單而存儲在應用程序文件夾中的DTD文件會被包含在最終形成的XML裡

  這個方法用到了許多種不同的FileStreams一種FileStream (Stream A)中包含有關DTD的信息另一種FileStream(Stream B)用於創建最終的XML文件Stream A會流入Stream B中DataSet會直接流入Stream B中然後Stream B會關閉並作為一個XML文件存入你的文件系統中

  首先應該准備的是DataSet你可以創建一個新的基於schema的dataset然後進行數據綁定接下來將DTD文件讀取到一個FileStream(Stream A)中你可以通過創建一個FileStream對象和一個StreamReader對象來實現這一點通過StreamReader來將文本文件讀取到FileStream中 Private Function GetDTD(DTDFilePath as string) _

  As IOFileStream

  Dim fsDTD As SystemIOFileStream

  Dim srDTD As IOStreamReader

  fsDTD = New IOFileStream(DTDFilePath _

  IOFileModeOpen)

  srDTD = New IOStreamReader(fsDTD)

  GetDTD = fsDTD

  End Function

  接下來要准備的是用於創建最終的輸出文件的主要FileStream (Stream B)新建一個FileStream然後用一個StreamWriter來創建一個新文件此時這個新文件被稱為FinalXML你可以在Web程序文件夾中創建它你需要注意IOFileModeCreate符合你需要的文件模式有許多種 Dim StreamB As SystemIOFileStream

  Dim swOutput As IOStreamWriter

  Try

  StreamB = New IOFileStream( _

  ServerMapPath() & FINALxml _

  IOFileModeCreate)

  Catch ex As Exception

  Throw

  End Try

  swOutput = New IOStreamWriter(StreamB)

  之後要進入一個十分巧妙的環節――將Stream A的內容導入Stream B你可以用單個字節或者字節數組來將數據導入或取出數據流需要注意的是StreamReader有些例外它用的是char數據而不是字節數據

  調用你之前寫好的GetDTD函數它將返回作為FileStream的DTD文件然後建立一個和DTD stream同等長度的字節數組將stream讀取到字節數組中最後關閉它――因為你不再需要用到它了現在所有的東西都被包含到字節數組中了 dim StreamA as IOFileStream

  StreamA = GetDTD()

  Dim bytearray(StreamALength) As Byte

  StreamARead(bytearray StreamALength)

  StreamAClose()

  接下來將數據從DTD文件中取出並放入已經被創建好成為最終輸出文件的數據流中你可以通過從數組中取出然後放入FileStream來實現這一點取出數組中所有項目(除最後一項外)以便去掉文件中最後的字符 StreamBWrite(bytearray bytearrayLength

  現在你就可以將DataSet中的數據導入文件中了DataSet中的WriteXML方法有許多覆蓋方法比如寫入一個真實的文件中此時你可以用將輸出文件導入一個FileStream (Stream B)的覆蓋方法 myDataSetWriteXml(StreamB)

  不要忘記關閉文件數據流 StreamBClose

  一旦關閉了Stream B你便可以從文件系統中訪問最新的Finalxml文件了你還可以將這種方法用到其他類型的文本文件中


From:http://tw.wingwit.com/Article/program/ASP/201311/21711.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.