6
votes

Lire la chaîne XML dans la zone de texte avec Newline

J'ai une classe avec un membre "adresse" que j'ai lu à partir d'un fichier XML présentant le format suivant (fausse adresse - le nom du champ XML est "adresse" - non affichée):

106- 1190 Crescent St. \ R \ N Toronto Ont \ R \ N V2K 2Z6 STRUT> P>

J'ai créé une zone de texte multiligne à afficher sous un formulaire avec la propriété Accept-return définie sur true. p>

La zone de texte affiche les éléments suivants avec les caractères neufs ne fonctionnant pas p>

106-1190 Crescent St. \ r \ n Toronto On \ R \ N V2K 2Z6 Strong> P>

J'ai regardé en ligne pour diverses solutions et j'ai essayé ce qui suit: p>

1) \ n et \\ n p>

2) \\ r \\ n p>

Ça fonctionne si j'ajoute à la propriété directement comme si: p> xxx pré>

mais si je charge une variable de chaîne à partir d'un fichier XML et Essayez d'assigner à la propriété Text: p>

Address.Text = Employee.Address;


1 commentaires

Essayez différentes combinaisons des fonctions d'évacuation () et inescape () pour nettoyer les données ... pensez à cela du point de vue de "Et si je voulais que le" \ n "apparaisse comme un" \ 'et "n' Dans la zone de texte, alors que ferais-je pour que cela ne se présente pas de cette façon.


5 Réponses :


3
votes

Lorsque vous dites "\ n" code> dans le code source, le compiler convertit le \ n code> sur une nouvelle ligne, mais lorsque vous lisez votre XML, vous obtenez les deux caractères distincts \ code> et n code>. Celles-ci ne sont pas traitées par le compilateur, ne seront donc pas converties en une nouvelle ligne. Au lieu de cela, il sera représenté dans une chaîne comme "\\ n" code>, c'est-à-dire une barre oblique inverse évasée suivie de n.

Le moyen le plus simple de résoudre le problème avant de remplacer les caractères avant d'afficher. P >

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


0 commentaires

0
votes

106-1190 Croissant St. \ R \ N Toronto Ont \ R \ N V2K 2Z6

Je pense que cela change lorsque vous lisez du champ XML. Vérifiez que ou essayez après la lecture pour remplacer la valeur de chaîne deux backslash en une barre oblique inverse.


0 commentaires

7
votes

Le contrôle de la zone de texte n'interprète pas les échappés et XML non plus. Donc, ce n'est que les personnages \ r et n. Vous devez traiter la chaîne, substituant la chaîne @ "\ r \ n" pour "\ r \ n". xxx

Il s'agit de l'équivalent à ce xxx

Parce que @ empêche l'interprétation de \ dans la chaîne.

Edit: basé sur un commentaire, c'est encore mieux formulaire, il se traduit par \ n sur UNIX, et \ r \ n sous Windows. xxx


3 commentaires

+1 - Une meilleure solution que les autres réponses publiées. Vous voudrez peut-être remplacer les séquences "\ r \ n" avec environnement.Newline plutôt que "\ r \ n" (Remarque: Certains contrôles ne fonctionnent pas avec Environnement.Newline et nécessite un \ r \ n mais je peux ' t Se souvenir de la décoloration si textuelle est l'une des celles qui le font mal)


@Jason: La classe d'édition Windows nécessite \ r \ n et pas seulement \ n. C'est une bonne amélioration.


Merci pour la réponse: j'ai utilisé adresse.text = employé.address.replace ("\\ r \\ n", "\ r \ n"); lire la chaîne XML et l'employé.changeAddress (adresse.text.replace ("\ r \ n", "\\ r \\ n")); Pour l'écrire, sinon le fichier XML utilise les nouvelles lignes sur le brouillon et met les nouvelles lignes dans mon XML qui a l'air mauvais.



1
votes

Vous devez utiliser Strings RAW , puis écrire @ "106-1190 Crescent St. \ r \ ntoronto Ont \ r \ nv2k 2z6" code>. Cela entraîne le traitement du littéral de chaîne sans aucune interprétation spécifique à la langue, de sorte que "\ n" code> reste "\ n" code>.

.

similaire, pour attribuer une chaîne brute À partir d'une variable, utilisez: P>

Address.Text = @Employee.Address;


0 commentaires

0
votes

Ici vous allez.

adresse.text = employé.address.replace ("\ n", environnement.newline);


0 commentaires