2010-02-06 45 views
5

ile metin kutusuna xml dizesini oku Şu şekilde bir XML dosyasından okuduğum bir "Adres" üyesi olan bir sınıfım var (sahte adres - XML ​​alan adı "Adres" - gösterilmiyor):Yeni satır

106-1190 Hilal St. \ r \ n Toronto Ont \ r \ n V2K 2Z6 Ben true olarak ayarlanmış özelliği-Dönüş Kabul olan bir formda görüntülemek için bir Multi-Hat metin kutusu oluşturduk

.

metin kutusu yeni satır karakterleri

106-1190 Hilal St çalışmıyor aşağıdaki görüntüler \ r \ n Toronto Ont \ r \ n V2K 2Z6

çevrimiçi baktım çeşitli çözeltiler için ve aşağıdaki çalıştık:

1) \ n ve \\ n

2) \\ r \\ n

Address.Text = "106-1190 Crescent St.\r\nToronto Ont\r\nV2K 2Z6"; 

Ama bir XML dosyasından bir dize değişkeni yüklemek ve eğer Metin özelliğine atamak deneyin:

Address.Text = Employee.Address; 

It does öylesine gibi doğrudan özelliğine eklersenizÇalışıyor çalışmıyor

Ben direkt atama ve değişken atama ang arasındaki farkı kontrol etmek izle noktalarını ayarlamak bu farkı var:

Doğrudan: 106-1190 Hilal St. \ r \ n Toronto Ont \ r \ n V2K 2Z6

Değişken: 106-1190 Crescent St. \\ r \\ n Toronto oNT \\ r \\ n V2K yani bir yerde kod dönüştürme bir çift ters bölü için ters eğik değişiyor 2Z6

XML dizgisi değişkene.

Gerçekten ekstra çizgi kaldırmak için benim XML dizeleri ayrıştırmak zorunda kalmak istemiyoruz .... Bunu sadece bir doğru dize değişkeni dönüştürülmüş olur, öyle ki bir XML dosyasında benim dize verileri temsil nasıl satırımın düzgün görünmesi için tek eğik çizgi.

Şimdiden teşekkürler. Kaynak kodunda "\n" derken

+0

Verileri temizlemek için escape() ve unescape() işlevlerinin farklı kombinasyonlarını deneyin ... Bunu, "neyi istersem, \ n" ifadesini gerçek bir '\' olarak göstermek için düşünün. ve 'n' metin kutusuna, daha sonra ben o anlamda görünmüyor yapmak için ne yapardınız –

cevap

6

metin kutusu denetimi kaçar yorumlamak değildir ve XML ne yapar. yani bu sadece karakterler ve r. Dizeyi, "\ r \ n" için @ \ r \ n dizesini kullanarak değiştirmeniz gerekir. @ Dize \ yorumlama önler, çünkü

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

bu

bu

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

eşdeğerdir.

düzenleme: açıklama dayanarak bu daha da iyi şeklidir, bu unix \ n çevirir ve Windows üzerinde \ r \ n.

Address.Text = Employee.Address.Replace("\\r\\n", Environment.NewLine); 
+0

1 -.. yayınlanmıştır diğer yanıtlardan daha iyi bir çözüm Sen Çevre ile "\ r \ n" dizileri değiştirmek isteyebilir .Newline yerine "\ r \ n" (Not: Bazı denetimler Environment.Newline ile çalışmaz ve açık bir \ r \ n gerektirmez, ancak Textbox'lar yanlış olanlardan biri ise, bu durumdan emin olamıyorum) –

+0

@Jason:., Windows Düzenleme sınıfı \ r \ n gerektirir ve sadece \ n değil Bu iyi bir gelişme cevap –

+0

teşekkürler. Ben Address.Text = Employee.Address.Replace ("kullanılan \\ r \\ n "," \ r \ n ") XML dizgisini okumak ve Çalışanı.ChangeAddress (Address.Text.Replace ("\ r \ n", "\\ r \\ n")); Geri yazmak için , aksi halde XML dosyası wrtiting üzerine yeni satırları kullanır ve benim XML'imdeki hatalı görünen yeni satırları koyar. – Greycrow

3

, derleyici bir yeni satır için \n dönüştürür, ancak XML okurken iki ayrı karakter \ ve n olsun. Bunlar derleyici tarafından ele alınmaz, bu yüzden bir satırsonuna dönüştürülmez. Bunun yerine, "\\n", yani kaçan ters eğik çizgi gibi bir dizede n ile temsil edilecektir.

Büyük olasılıkla görüntülemeden önce karakterleri değiştirmek için düzeltmenin en kolay yolu.

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

iyi bir yol oluşturulan XML veri kaçan dizileri içermediğinden emin olmak için olacaktır.Bunlar XML'in bir parçası değildir ve sadece normal satır sonları olmalıdır.

0

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

Ben XML alanından okurken o değiştirdiğini düşünüyorum. Bunu kontrol edin ya da dize değerini iki ters eğik çizgi ile bir ters eğik çizgi halinde değiştirin.

1

Sen raw strings kullanmalıdır ve sonra @"106-1190 Crescent St.\r\nToronto Ont\r\nV2K 2Z6" yazabilirsiniz. Bu, dize değişmezinin dile özgü bir yorumu olmadan işlenmesine neden olur, bu nedenle "\n", "\n" kalır. Benzer şekilde

, değişken, kullanımdan çiğ dize atamak için:

Address.Text = @Employee.Address; 

Edit: Ben de String.Replace("\\r\\n", Environment.NewLine); aramaya diyenlerin katılıyorum. Bu "\r\n" ile değiştirilmesi daha platformdan bağımsız bir çözümdür ve Console.WriteLine() gibi yöntemler yerine yine Environment.NewLine ekleme kodlanmış örneğin "\n". Bakınız MSDN's writeup on Environment.NewLine.