程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .NET FileStreams將DTD插入XML文件中

.NET FileStreams將DTD插入XML文件中

編輯:關於.NET

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

技術工具箱: VB.NET, XML, ADO.NET

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

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

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

而System.IO.FileStream對象能幫你解決這個問題。你可以創建一個 FileStream並將DTD插入你的XML文件中,一個FileStream又引出兩種FileStream ――它們分別從DTD和dataset中得到。你可以用DTD文件和一些范例XML來設計 DataSet schema。VS.NET的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 IO.FileStream
  Dim fsDTD As System.IO.FileStream
  Dim srDTD As IO.StreamReader
  fsDTD = New IO.FileStream(DTDFilePath, _
  IO.FileMode.Open)
  srDTD = New IO.StreamReader(fsDTD)
  GetDTD = fsDTD
  End Function

接下來要准備的是用於創建最終的輸出文件的主要FileStream (Stream B)。 新建一個FileStream,然後用一個StreamWriter來創建一個新文件。此時,這個 新文件被稱為Final.XML;你可以在Web程序文件夾中創建它。你需要注意 IO.FileMode.Create。符合你需要的文件模式有許多種:

Dim StreamB As System.IO.FileStream
  Dim swOutput As IO.StreamWriter
  Try
  StreamB = New IO.FileStream( _
  Server.MapPath("") & "FINAL.xml", _
  IO.FileMode.Create)
  Catch ex As Exception
  Throw
  End Try
  swOutput = New IO.StreamWriter(StreamB)

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

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

dim StreamA as IO.FileStream
  StreamA = GetDTD()
  Dim bytearray(StreamA.Length) As Byte
  StreamA.Read(bytearray, 0, StreamA.Length)
  StreamA.Close()

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

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

不要忘記關閉文件數據流: StreamB.Close

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved