dobles comillas c# xml

C#String.Replace comillas dobles y literales



gsub comillas (4)

Soy bastante nuevo en c # así que es por eso que estoy preguntando esto aquí.

Estoy consumiendo un servicio web que devuelve una larga cadena de valores XML. Como esta es una cadena, todos los atributos han escapado de comillas dobles

string xmlSample = "<root><item att1=/"value/" att2=/"value2/" /></root>"

Aquí está mi problema. Quiero hacer un simple string.replace. Si estuviera trabajando en PHP, solo correría strip_slashes ().

Sin embargo, estoy en C # y no puedo por la vida de mí resolverlo. No puedo escribir mi expresión para reemplazar las comillas dobles (") porque termina la cadena. Si la escapo, tiene resultados incorrectos. ¿Qué estoy haciendo mal?

string search = "///""; string replace = "/""; Regex rgx = new Regex(search); string strip = rgx.Replace(xmlSample, replace); //Actual Result <root><item att1=value att2=value2 /></root> //Desired Result <root><item att1="value" att2="value2" /></root>

MizardX: para incluir una cita en una cadena sin formato, debe duplicarla.

Esa es información importante, probando ese enfoque ahora ... No hay suerte allí. Hay algo pasando aquí con las comillas dobles. Los conceptos que todos ustedes sugieren son sólidos, PERO el problema aquí es lidiar con las comillas dobles y parece que tendré que hacer una investigación adicional para resolver este problema. Si a alguien se le ocurre algo, publique una respuesta.

string newC = xmlSample.Replace("///"", "/""); //Result <root><item att=/"value/" att2=/"value2/" /></root> string newC = xmlSample.Replace("/"", "''"); //Result newC "<root><item att=''value'' att2=''value2'' /></root>"


No hay ninguna razón para usar una expresión Regular en absoluto ... eso es mucho más pesado de lo que necesita.

string xmlSample = "blah blah blah"; xmlSample = xmlSample.Replace("///", "/"");


Tanto la cadena como la expresión regular usan / para escapar. La expresión regular verá el carácter / seguido de " , y piensa que es un escape literal. Prueba esto:

Regex rgx = new Regex("/////""); string strip = rgx.Replace(xmlSample, "/"");

También puede usar cadenas sin formato (también conocidas como cadenas de veratim) en C #. Están prefijados con @ , y todas las barras diagonales inversas se tratan como caracteres normales. Para incluir una cita en una cadena sin formato, debe duplicarla.

Regex rgx = new Regex(@"/""")
string strip = rgx.Replace(xmlSample, @"""");


Si obtiene una cadena XML, ¿por qué no usar cadenas XML en lugar de cadenas?

tendrá acceso a todos los elementos y atributos, y será mucho más fácil y extremadamente rápido si usa el espacio de nombres System.Xml

en tu ejemplo, estás obteniendo esta cadena:

string xmlSample = "<root><item att1=/"value/" att2=/"value2/" /></root>";

Todo lo que necesita hacer es convertir esa cadena en un documento XML y usarlo, como:

System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.LoadXml(xmlSample); System.Xml.XmlElement _root = xml.DocumentElement; foreach (System.Xml.XmlNode _node in _root) { Literal1.Text = "<hr/>" + _node.Name + "<br/>"; for (int iAtt = 0; iAtt < _node.Attributes.Count; iAtt++) Literal1.Text += _node.Attributes[iAtt].Name + " = " + _node.Attributes[iAtt].Value + "<br/>"; }

en ASP.NET esto generará en Literal1 algo así como:

item att1 = value att2 = value2

una vez que tiene el elemento en un XmlElement, es muy fácil buscar y obtener los valores y nombres de lo que hay en ese elemento.

pruébalo, lo uso mucho al recuperar respuestas de WebServices y cuando almaceno algo en un archivo XML como configuración para una pequeña aplicación, por ejemplo.


la siguiente declaración en C #

string xmlSample = "<root><item att1=/"value/" att2=/"value2/" /></root>"

en realidad almacenará el valor

<root><item att1="value" att2="value2" /></root>

mientras

string xmlSample = @"<root><item att1=/""value/"" att2=/""value2/"" /></root>";

tener el valor de

<root><item att1=/"value/" att2=/"value2/" /></root>

para el segundo caso, debe reemplazar la barra inclinada () por una cadena vacía de la siguiente manera

string test = xmlSample.Replace(@"/", string.Empty);

el resultado será

<root><item att1="value" att2="value2" /></root>

PD

  1. barra inclinada ( / ) es el carácter de escape predeterminado en C #
  2. para ignorar barras, use @ al comienzo de la cadena
  3. si se usa @, el carácter de escape es una comilla doble (")