Считайте строку xml в текстовое поле с новой строкой

У меня есть класс с участником "Адрес", который я считал из XML-файла, который имеет следующий формат (поддельный адрес - имя поля XML является "Адресом" - не показанный):

Crescent St., 106-1190, \r\n Торонто Ont \r\n V2K 2Z6

Я создал Многострочное Текстовое поле для отображения в форме с набором свойств Принимать-возврата к истинному.

Текстовое поле отображает следующее с символами новой строки, не работающими

Crescent St., 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-файла и пытаюсь присвоить его текстовому свойству:

Address.Text = Employee.Address;

Это не работает.

Я установил контрольные точки, чтобы проверить, что различие между прямым присвоением и переменным углом присвоения получило это различие:

Прямой: Crescent St., 106-1190, \r\n Торонто Ont \r\n V2K 2Z6

Переменная: Crescent St., 106-1190, \\r \\n Торонто Ont \\r \\n V2K 2Z6

таким образом, где-нибудь код изменяет обратную косую черту на двойную обратную косую черту в преобразовании от строки XML до переменной.

Я действительно не хочу должным быть анализировать свои строки XML для удаления дополнительной наклонной черты.... Как я представляю свои строковые данные в XML-файле, таким образом, что они преобразовываются в переменную соответствующей строки только с единственной наклонной чертой для моих разрывов строки для разоблачения правильно.

Заранее спасибо.

6
задан Greycrow 6 February 2010 в 20:37
поделиться

4 ответа

Управление текстовым полем не интерпретирует экранирования и не интерпретирует 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");

, потому что @ предотвращает интерпретацию \ в строке.

редактирование: на основе комментария, это еще лучшая форма, она переводится на \n в unix и \r\n в Windows.

Address.Text = Employee.Address.Replace("\\r\\n", Environment.NewLine);
7
ответ дан 9 December 2019 в 22:34
поделиться

Когда вы говорите "\ n" в исходном коде, компилятор преобразует \ n в новую строку , но когда вы читаете свой XML, вы получаете два разных символа \ и n . Они не обрабатываются компилятором, поэтому не будут преобразованы в новую строку. Вместо этого он будет представлен в строке как "\\ n" , то есть экранированная обратная косая черта, за которой следует n.

Самый простой способ исправить это, вероятно, заменить символы перед отображением.

Address.Text = Employee.Address.Replace("\\r", "\r").Replace("\\n", "\n");

Лучше всего убедиться, что сгенерированные XML-данные не содержат экранированных последовательностей. Они не являются частью XML и должны быть обычными переносами строк.

3
ответ дан 9 December 2019 в 22:34
поделиться

106-1190 Crescent St. \ r \ n Toronto Ont \ r \ n V2K 2Z6

Я думаю, что это меняется, когда вы читаете из поля XML . Проверьте это или попробуйте после чтения заменить в строковом значении две обратной косой черты на одну обратную косую черту.

0
ответ дан 9 December 2019 в 22:34
поделиться

Вы должны использовать необработанные строки , а затем можете написать @ "106-1190 Crescent St. \ r \ nToronto На \ r \ nV2K 2Z6 ". Это приводит к тому, что строковый литерал обрабатывается без какой-либо языковой интерпретации, поэтому "\ n" остается "\ n" .

Аналогичным образом, чтобы присвоить необработанную строку из переменной, используйте:

Address.Text = @Employee.Address;

Изменить: я также согласен с теми, кто сказал вызывать String.Replace ("\\ r \\ n", Environment.NewLine) ; . Это более независимое от платформы решение, чем его замена на "\ r \ n" и такие методы, как Console.WriteLine () append Environment.NewLine в любом случае вместо жестко запрограммированного , например, "\ n" . См. запись MSDN на Environment.NewLine .

1
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: