2011-01-12 13 views
17

soy enviado una cadena XML que estoy tratando de analizar a través de un XmlReader y estoy intentando que se deben eliminar los \" caracteres.C# reemplazan caracteres "

he intentado

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

además de varias otras maneras

Cualquier idea

Respuesta

37

estabas tratando de esta manera:

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

? Si es así, ese es el problema - Replace no cambia la cadena original , devuelve una nueva cadena decon el reemplazo realizado ... por lo que querría:

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

Tenga en cuenta que este reemplazará cada barra invertida y cada carácter de comillas dobles; si sólo quería para reemplazar el par "barra invertida seguida de comillas dobles" que le acaba de utilizar:

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

(Como se ha mencionado en los comentarios, esto se debe a que las cadenas son inmutables en .NET - una vez que se Tengo un objeto de cadena de alguna manera, esa cadena siempre tendrá los mismos contenidos. Puede asignar una referencia a una cadena diferente a una variable, por supuesto, pero eso no cambia el contenido de la cadena existente.)

+2

Its un error común, pero se hace mucho. En C# una 'cadena' es inmutable, si cambia algo al respecto, como usar el método' Reemplazar ', siempre devolverá una nueva cadena. – Anthony

+4

También tenga en cuenta que el depurador es escapando cadenas cuando se muestran. Estas barras invertidas adicionales, por supuesto, no pueden eliminarse mediante '.Replace()'. –

5

Prueba de esta manera:.?

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

Esto reemplazará las ocurrencias de \" con una cadena vacía.

Ex:

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

Esto dará como resultado:

the dog is my friend 
+0

tiene demasiadas barras invertidas, ¿verdad? – VoodooChild

+0

También debe acostumbrarse a String.Empty en lugar de "" –

+0

@VoodooChild - No, es exactamente la cantidad correcta de barras diagonales inversas. Ver mi ejemplo de código para la prueba. – dcp

0

Reemplazar (@ "\" "", "")

Tienes que utilizar dobles comillas dobles a escapedouble-quotes dentro de una cadena verbatim.

+0

¿Esto no funciona? – Greg

0

¿Dónde ocurren estos caracteres? ¿Los ves si examinas los datos XML en, por ejemplo, bloc de notas? ¿O los ve cuando examina los datos XML en el depurador? Si es el último, solo son caracteres de escape para los caracteres ", y por lo tanto parte de los datos XML reales.

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

por lo Replace("\\\"","")

4

En .NET Framework 4 y MVC Esta es la única representación que trabajaba:

Replace(@"""","") 

Utilizando una barra invertida en cualquier combinación no funcionó ...

Cuestiones relacionadas