2011-01-12 5 views
17

ich eine XML-Zeichenfolge gesendet bin, dass ich versuche, über einen XmlReader zu analysieren und ich versuche, die \" Zeichen Streifen aus.C# ersetzen “Zeichen

Ich habe versucht,

.Replace(@"\", "") 
.Replace("\\''", "''") 
.Replace("\\''", "\"") 

plus mehrere andere Möglichkeiten

Irgendwelche Ideen

Antwort

37

Haben Sie es so versuchen:

string text = GetTextFromSomewhere(); 
text.Replace("\\", ""); 
text.Replace("\"", ""); 

? Wenn ja, das ist das Problem - Replace nicht die original Zeichenfolge ändern, es gibt eine neue String mit dem Ersatz ausgeführt ... so würde Sie wollen:

string text = GetTextFromSomewhere(); 
text = text.Replace("\\", "").Replace("\"", ""); 

Beachten Sie, dass diese ersetzen jeder Backslash und jedes doppelte Anführungszeichen; wenn Sie nur das Paar „Backslash gefolgt von doppelten Anführungszeichen“ ersetzen wollte sie würden gerade verwenden:

string text = GetTextFromSomewhere(); 
text = text.Replace("\\\"", ""); 

(Wie in den Kommentaren erwähnt, ist dies, weil Strings unveränderlich in .NET sind - wenn Sie habe irgendwie ein String-Objekt, diese Zeichenfolge hat immer den gleichen Inhalt Sie können einer Variablen natürlich einen Verweis auf eine andere-Zeichenfolge zuweisen, aber das ändert den Inhalt der vorhandenen Zeichenfolge nicht wirklich.)

+2

ein häufig vorkommender Fehler, wird aber sehr oft gemacht.In C# ist ein 'String' unveränderlich, wenn Sie etwas ändern, wie zum Beispiel die' Replace'-Methode, wird immer eine neue Zeichenkette zurückgegeben. – Anthony

+4

Beachten Sie auch, dass der Debugger ist Zeichenketten bei der Darstellung entgehen Diese zusätzlichen Backslashes können natürlich nicht durch '.Replace()' entfernt werden. –

5

es so versuchen:.?

Replace("\\\"",""); 

Dadurch wird das Vorkommen \" durch eine leere Zeichenfolge ersetzt.

Ex:

string t = "\\\"the dog is my friend\\\""; 
t = t.Replace("\\\"",""); 

Dies führt zu:

the dog is my friend 
+0

Sie haben einen zu viele Backslashes, nicht wahr? – VoodooChild

+0

Auch sollten Sie sich an String.Empty statt "" –

+0

@VoodooChild - Nein, es ist genau die richtige Menge an Backslashes. Siehe mein Codebeispiel für den Beweis. – dcp

0

ersetzen (@ "\" "", "")

Sie haben verwenden Doppel doublequotes zu escapedouble-quotes innerhalb einer Verbatim-Zeichenfolge.

+0

Funktioniert das nicht? – Greg

0

Wo treten diese Zeichen auf? Siehst du sie, wenn du die XML-Daten zum Beispiel in einem Notizblock untersuchst? Oder sehen Sie sie, wenn Sie die XML-Daten im Debugger untersuchen. Wenn es das letztere ist, sind sie nur Escape-Zeichen für die " Zeichen und so Teil der tatsächlichen XML-Daten.

0
\ => \\ and " => \" 

so Replace("\\\"","")

4

In .NET Framework 4 und MVC ist dies die einzige Darstellung, die funktioniert:

Replace(@"""","") 

Mit einem umgekehrten Schrägstrich in welcher Kombination hat nicht funktioniert ...