C# 使用换行符将xml字符串读入文本框
我有一个带有成员“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 如果我像这样直接添加到属性中,它会起作用: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.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()
appendEnvironment.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;