我有一个带有成员“地址”的类,我从一个XML文件读取,该文件具有以下格式(虚假地址 - XML字段名称为“地址” - 未显示):
106-1190 Crescent St. \ r \ n Toronto Ont \ r \ n \ nV2K 2Z6
我创建了一个多行文本框,以Accepts-Return属性设置为true的形式显示。
文本框显示以下内容,换行字符不起作用
106-1190 Crescent St. \ r \ n Toronto Ont \ r \ n \ nV2K 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 Crescent St. \ r \ n Toronto Ont \ r \ n \ nV2K 2Z6
变量: 106-1190 Crescent St. \\ r \\ n Toronto Ont \\ r \\ n V2K 2Z6
所以某些地方代码正在将反斜杠更改为从XML字符串转换为变量的双反斜杠。
我真的不想解析我的XML字符串以删除额外的斜杠.... 如何在XML文件中表示我的字符串数据,以便只使用单斜杠将其转换为正确的字符串变量,以便正确显示换行符。
提前致谢。
答案 0 :(得分:6)
文本框控件不解释转义,也不解释XML。所以这只是字符\ r和n。你需要处理字符串,用字符串@“\ r \ n”代替“\ r \ n”。
Address.Text = Employee.Address.Replace(@"\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);
答案 1 :(得分:3)
当您在源代码中说"\n"
时,编译器会将\n
转换为换行符,但是当您阅读XML时,您会得到两个不同的字符\
和{{1} }。这些不受编译器处理,因此不会转换为换行符。相反,它将以字符串形式表示为n
,即转义后的反斜杠后跟n。
最简单的修复方法可能是在显示之前替换字符。
"\\n"
更好的方法是确保生成的XML数据不包含转义序列。这些不是XML的一部分,应该只是正常的换行符。
答案 2 :(得分:1)
您应该使用raw strings,然后您可以撰写@"106-1190 Crescent St.\r\nToronto Ont\r\nV2K 2Z6"
。这会导致处理字符串文字而不进行任何特定于语言的解释,因此"\n"
仍为"\n"
。
同样,要从变量中分配原始字符串,请使用:
Address.Text = @Employee.Address;
编辑:我也同意那些打电话给String.Replace("\\r\\n", Environment.NewLine);
的人。这是一个更加独立于平台的解决方案,而不是将其替换为"\r\n"
,而Console.WriteLine()
等方法无论如何都会附加Environment.NewLine
而不是硬编码的"\n"
。请参阅MSDN's writeup on Environment.NewLine。
答案 3 :(得分:0)
106-1190 Crescent St. \ r \ n Toronto Ont \ r \ n \ nV2K 2Z6
我认为从XML字段读取时它会发生变化。检查或在读取后尝试将字符串值两个反斜杠替换为一个反斜杠。
答案 4 :(得分:0)
你在这里。
Address.Text = Employee.Address.Replace(“ \ n”,Environment.NewLine);