2010-10-21 5 views
2

J'ai un fichier XML que j'utilise linq-to-XML pour lire. Linq-to-XML préserve les sauts de ligne et les espaces d'indentation.Remplacer une chaîne variable par une chaîne vide

Ainsi, au lieu d'avoir un Guid comme celui-ci:

"FB5417E2-DB15-481d-80D6-D0C4CB26EB1F"

Je reçois des trucs comme ça:

"\n FB5417E2-DB15-481d-80D6-D0C4CB26EB1F"

J'ai fait cette méthode pour essayer d'aider à compenser ceci:

public static string ValueTrimmed(this XElement element) 
{   
    if (element != null) 
     // Remove the newlines and spaces 
     return element.Value.Replace("\n  ", ""); 

    return ""; 
} 

Le problème est que cela ne fonctionne que pour "\ n" + 6 espaces.

Existe-t-il un moyen de supprimer "\ n" + N'importe quel nombre d'espaces?

Remarque: J'ai des scénarios dans lesquels les espaces "\ n" + x se trouvent à l'intérieur de la valeur.
Par exemple:

TextTextTextTextTextTextText\n  TextTextTextTextTextTextText
+2

Y a-t-il des espaces quelconques à préserver? –

Répondre

7

Supprimer toutes les nouvelles lignes suivies d'espaces:

return Regex.Replace(element.Value, @"\n\s*", String.Empty); 

Si vous souhaitez conserver un seul espace entre les lignes:

return Regex.Replace(element.Value, @"\n\s*", " ").Trim(); 
4

Vous pouvez essayer d'utiliser string.Trim pour supprimer tous les espaces avant et:

return element.Value.Trim(); 
+0

Cela fonctionnerait pour l'exemple que j'ai montré, mais j'ai du texte qui a traversé plusieurs lignes (c'est-à-dire 'TextTextText \ n texttexttext') – Vaccano

1
string result = input 
    .Replace("\\n", String.Empty) // replace escaped \n with nothing 
    .Trim(); // removing leading (and trailing) spaces 

ou (essayer, pas sûr)

string result = input.Trim(new[] { '\n' }); 
3

au lieu de bidouiller avec des expressions régulières, indiquez si l'espace blanc est conservé ou non lorsque vous créez votre XDocument en utilisant le approprié LoadOptions:

Preserve white-space:

var xdoc1 = XDocument.Parse("<root>\r\n</root>", LoadOptions.PreserveWhitespace); 
var xdoc2 = XDocument.Load(@"\path\to\xml", LoadOptions.PreserveWhitespace); 

Ignore white-space:

var xdoc1 = XDocument.Parse("<root>\r\n</root>", LoadOptions.None); 
var xdoc2 = XDocument.Load(@"\path\to\xml", LoadOptions.None); 
0

entrez le code iciSi étiez-vous, à l'intérieur du extérieur si le lieu autre si la vérification des « \ n » et si cela retourne vrai, dans un contrôle de boucle pour « \ » ou "n" ou "" et remplacez par "".

Essentiellement quelque chose comme ça en pseudo-code ...

if (string != null) //check if string is not null 
{ 
    if ((string.indexOf(0) == "\\") && (string.indexOf(1) == "n")) //check if string begins with \n 
    { 
     for (int i = 0; i < string.length; i++) \\since string begins with "\n" iterate until each character is neither "\", "n", " " and replace each one of those with "" 
     { 
      if((string.indexOf(i) == "\\") || (string.indexOf(i) == "n") || (string.indexOf(i) == " ")) 
       string.indexOf(i) = ""; 
     } 

    } 
} 

me excuse, cela pourrait être un peu en désordre et une partie de la syntaxe peut être légèrement, mais vous obtenez le jist.

Questions connexes