Прочитать строку XML в текстовое поле с новой строкой - PullRequest
5 голосов
/ 06 февраля 2010

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

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

Я создал многострочное текстовое поле для отображения в форме со свойством Accepts-Return, установленным в true.

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

106-1190 Crescent St. \ Toronto 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;

Не работает.

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

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

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 06 февраля 2010

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

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

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

Address.Text = Employee.Address.Replace("\\r\\n", Environment.NewLine);
3 голосов
/ 06 февраля 2010

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

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

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

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

1 голос
/ 06 февраля 2010

Вы должны использовать необработанные строки , а затем вы можете написать @"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() append Environment.NewLine в любом случае вместо жестко-кодированного "\n", например. См. описание MSDN для Environment.NewLine .

0 голосов
/ 06 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...