2011-06-02 45 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对,都在元素之间和之间。