Tengo dos objetos XML serializados como:
<car id="1">
<name>Renault</name>
<type>
<gear>Manual</gear>
<petrol>Gas</petrol>
<model>11</model>
</type>
<status>Available</status>
</car>
Y otra solo siendo una etiqueta:
<type>
<gear>Automatic</gear>
</type>
Quiero reemplazar el tipo de nodo del primer objeto con el nodo del segundo objeto.
Lo intenté:
string output = Regex.Replace(input, @"<type>(.*)</type>", replacement, RegexOptions.IgnoreCase);
Pero no da el resultado deseado. ¿Alguna sugerencia?
2 respuestas
Puedes hacer esto mi XmlDocument
:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<car id=\"1\"><name>Renault</name><type><gear>Manual</gear><petrol>Gas</petrol><model>11</model></type><status>Available</status></car>");
var typeNode = xmlDoc.SelectSingleNode("descendant::car[@id='1']/type");
if (typeNode != null) typeNode.InnerText = "<gear>Automatic</gear>";
string str = xmlDoc.InnerXml;
Puedes usar tu propia función con subcadena, como esta
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(NodeReplace(xml, "type",value));
}
public string NodeReplace(string xml, string nodeToFind, string newValue)
{
int start = xml.IndexOf("<" + nodeToFind);
int end = xml.IndexOf("</" + nodeToFind + ">");
string toreplace = xml.Substring(start, end + 3 + (nodeToFind.Length) - start);
xml = xml.Replace(toreplace, newValue);
return xml;
}
Pero si quieres una recomendación, creo que es mejor serializar con una clase y simplemente reemplazar tu nodo como una variable
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.