2011-06-02 50 views
3

如何從一組數據中解析出不需要的字符?如何用空間替換CRLF?

我正在使用Windows應用程序的現有VB.NET代碼,該應用程序使用StreamWriter和Serializer輸出交易數據的XML文檔。下面的代碼。

Private TransactionFile As ProjectSchema.TransactionFile 
Dim Serializer As New Xml.Serialization.XmlSerializer(GetType (ProjectSchema.TransactionFile)) 
Dim Writer As TextWriter 
Dim FilePath As String 
Writer = New StreamWriter(FilePath) 
Serializer.Serialize(Writer, TransactionFile) 
Writer.Close() 

將XML文檔上傳到另一個不接受「crlf」的應用程序。

「TransactionFile」是一個名爲ProjectSchema.TransactionFile的類中的數據的集合。它包含各種數據類型。 有5個函數可用於創建節點,這些節點有助於創建名爲TransactionFile的主事務文件

我需要在數據集合中查找CRLF字符並用空格替換CRLF字符。

我能夠在現場級,以取代非法字符:

.Name = Regex.Replace((Mid(CustomerName.Name, 1, 30)), "[^A-Za-z0-9\-/]", " ") 

但我需要擦洗整個數據集。

如果我嘗試:

TransactionFile = Regex.Replace(TransactionFile, "[^A-Za-z0-9\-/]", " ") 

因爲TransactionFile不能轉換爲字符串我「從類型‘交易’轉換到類型‘串’無效」得到的消息。

底線=在TransactionFile數據中顯示時,如何用空格替換CRLF?

+0

您*可能*能夠編碼CDATA標籤中的違規字段。也許消費服務對於CDATA中的CRLF而言沒有問題,但不在非cdata字段中。 – 2011-06-02 22:58:14

回答

2

不要這樣做。使用XmlWriter.Create()創建序列化程序。其中有一個接受XmlWriterSettings對象的重載。其中有很多選項來格式化生成的XML。像NewLineChars一樣,它可以讓你設置字符用於行結束。

1

正如Hans所說,弄亂了XmlWriterSettings。

下一個最好的選擇是編寫文件,然後將文件讀入xml對象並逐個處理它。例如,這可以讓你從單個元素中刪除crlf,但只保留元素之間的元素。

另一種可能性 - 而不是直接寫入文件,可以使中間字符串,做一個替代:

 Dim ms As New MemoryStream 
     Serializer.Serialize(ms, TransactionFile) 

     ms.Flush() 
     ms.Position = 0 

     Dim sr As New StreamReader(ms) 
     Dim xmlString As String = sr.ReadToEnd 

     sr.Close() ' also closes underlying memorystream 

那麼你可以做你的正則表達式上的xmlString更換寫入前一份文件。這應該得到所有的crlf對,都在元素之間和之間。