C# 使用换行符将xml字符串读入文本框

C# 使用换行符将xml字符串读入文本框,c#,xml,winforms,C#,Xml,Winforms,我有一个带有成员“Address”的类,我从具有以下格式的XML文件中读取该类(假地址-XML字段名为“Address”-未显示): 106-1190新月街。\r\n多伦多Ont\r\n V2K 2Z6 我创建了一个多行文本框,以在Accepts-Return属性设置为true的表单中显示 文本框显示以下内容,其中新行字符无效 106-1190新月街。\r\n多伦多Ont\r\n V2K 2Z6 我在网上寻找了各种解决方案,并尝试了以下方法: 1) \n和\\n 2) \\r\\n 如果我像这样

我有一个带有成员“Address”的类,我从具有以下格式的XML文件中读取该类(假地址-XML字段名为“Address”-未显示):

106-1190新月街。\r\n多伦多Ont\r\n V2K 2Z6

我创建了一个多行文本框,以在Accepts-Return属性设置为true的表单中显示

文本框显示以下内容,其中新行字符无效

106-1190新月街。\r\n多伦多Ont\r\n V2K 2Z6

我在网上寻找了各种解决方案,并尝试了以下方法:

1) \n和\\n

2) \\r\\n

如果我像这样直接添加到属性中,它会起作用:

Address.Text = "106-1190 Crescent St.\r\nToronto Ont\r\nV2K 2Z6";
但如果我从XML文件加载字符串变量并尝试将其分配给Text属性:

Address.Text = Employee.Address;
它不起作用

我设置了观察点,以检查直接赋值和变量赋值之间的差异,并得出以下差异:

直接:106-1190新月街。\r\n多伦多Ont\r\n V2K 2Z6

变量:106-1190新月街\\r\\n多伦多Ont\\r\\n V2K 2Z6

因此,在将XML字符串转换为变量时,代码将反斜杠更改为双反斜杠

我真的不想解析XML字符串来删除多余的斜杠。。。。 如何在XML文件中表示字符串数据,以便仅用一个斜杠将其转换为正确的字符串变量,以便正确显示换行符

提前感谢。

当您在源代码中说
“\n”
时,编译器会将
\n
转换为换行符,但当您读取XML时,会得到两个不同的字符
\
n
。编译器不会处理这些内容,因此不会转换为换行符。相反,它将在字符串中表示为
“\\n”
,即转义反斜杠后跟n

最简单的修复方法可能是在显示之前替换字符

Address.Text = Employee.Address.Replace("\\r", "\r").Replace("\\n", "\n");
更好的方法是确保生成的XML数据不包含转义序列。这些不是XML的一部分,应该只是正常的换行符

新月街106-1190号。\r\n多伦多Ont\r\n V2K 2Z6


我认为当您从XML字段读取时,它会发生变化。选中该项或在读取后尝试将字符串值两个反斜杠替换为一个反斜杠。

文本框控件不解释转义,XML也不解释转义。这就是字符\r和n。您需要处理字符串,将字符串@“\r\n”替换为“\r\n”

这相当于这个

Address.Text = Employee.Address.Replace("\\r\\n", "\r\n");
因为@阻止对字符串中的\进行解释

编辑:根据注释,这是更好的形式,在unix上翻译为\n,在Windows上翻译为\r\n

Address.Text = Employee.Address.Replace("\\r\\n", Environment.NewLine);
您应该使用,然后您可以编写
@“106-1190 Crescent St.\r\n onto Ont\r\nV2K 2Z6”
。这会导致处理字符串文字时不进行任何特定于语言的解释,因此
“\n”
保留
“\n”

类似地,要从变量分配原始字符串,请使用:

Address.Text = @Employee.Address;
编辑:我也同意那些说调用
String.Replace(“\\r\\n”,Environment.NewLine)的人。这是一个更独立于平台的解决方案,而不是将其替换为
“\r\n”
,以及类似
Console.WriteLine()
append
Environment.NewLine
,而不是硬编码的
“\n”
。看。

给你


Address.Text=Employee.Address.Replace(“\n”,Environment.NewLine)

尝试使用escape()和unescape()函数的不同组合来清理数据。。。从“如果我想让“\n”在文本框中显示为实际的“\”和“n”,那么我该怎么做才能使它不显示为实际的“\”和“n”。+1-一个比发布的其他答案更好的解决方案。您可能想用Environment.Newline而不是“\r\n”替换“\r\n”序列(注意:某些控件不适用于环境。换行符和需要显式\r\n,但我不记得文本框是否是出错的控件之一)@Jason:Windows编辑类需要\r\n而不仅仅是\n。这是一个很好的改进。感谢您的回答:我使用了Address.Text=Employee.Address.Replace(\\r\\n“,“\r\n”);读取XML字符串和Employee.ChangeAddress(Address.Text.Replace(“\r\n”,“\\r\\n”);将其写回,否则XML文件在写入时使用换行符,并将换行符放入我的XML中,这看起来很糟糕。
Address.Text = @Employee.Address;