如何用空格替换CRLF?

时间:2011-06-02 22:18:53

标签: vb.net

如何从数据集合中解析出不受欢迎的字符?

我正在使用现有的VB.NET代码,用于使用StreamWriter和Serializer输出事务数据的XML文档的Windows应用程序。代码如下。

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无法转换为String,所以我得到“从类型'事务'转换为'String'类型无效”消息。

底线=当在TransactionFile数据中显示CRLF时,如何用空格替换CRLF?

2 个答案:

答案 0 :(得分:2)

不要这样做。使用XmlWriter.Create()创建序列化程序。其中有一个接受XmlWriterSettings对象的重载。它有很多选项来格式化生成的XML。与NewLineChars一样,它允许您设置用于行结束的字符。

答案 1 :(得分:1)

汉斯说,乱用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对,包括元素内和之间。