盡管你可以通過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(W
C)標准
為了能夠實現向後(即非
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
StreamA
Length)
StreamA
Close()
接下來
將數據從DTD文件中取出並放入已經被創建好成為最終輸出文件的數據流中
你可以通過從數組中取出然後放入FileStream來實現這一點
取出數組中所有項目(除最後一項外)以便去掉文件中最後的字符
StreamB
Write(bytearray
bytearray
Length
)
現在你就可以將DataSet中的數據導入文件中了
DataSet中的WriteXML方法有許多覆蓋方法
比如寫入一個真實的文件中
此時你可以用將輸出文件導入一個FileStream (Stream B)的覆蓋方法
myDataSet
WriteXml(StreamB)
不要忘記關閉文件數據流
StreamB
Close
一旦關閉了Stream B
你便可以從文件系統中訪問最新的Final
xml文件了
你還可以將這種方法用到其他類型的文本文件中
From:http://tw.wingwit.com/Article/program/net/201311/11602.html