c# - read - Anexar bloque de cadena XML a XmlDocument existente
xml c# ejemplo (6)
Como alternativa, así es como podría hacerlo de una manera más LINQy 3.5:
XDocument doc = XDocument.Load(@"c:/temp/test.xml");
XElement demoNode = new XElement("Demographic");
demoNode.Add(new XElement("Age"));
demoNode.Add(new XElement("DOB"));
doc.Descendants("Employee").Single().Add(demoNode);
doc.Save(@"c:/temp/test2.xml");
Tengo un XmlDocument que ya existe y se lee de un archivo.
Me gustaría agregar un trozo de Xml a un nodo en el documento. ¿Hay una buena manera de crear y agregar todos los nodos sin saturar mi código con muchas llamadas a .CreateNote y .AppendChild?
Me gustaría alguna forma de hacer un string o stringBuilder de una sección Xml válida y anexarla a un XmlNode.
ej .: Original XmlDoc:
<MyXml>
<Employee>
</Employee>
</MyXml>
y me gustaría agregar una etiqueta demográfica (con varios hijos) a Employee:
<MyXml>
<Employee>
<Demographic>
<Age/>
<DOB/>
</Demographic>
</Employee>
</MyXml>
Considere usar un XmlWriter para construir sus fragmentos en un StringBuilder ya que esto le proporcionará validación y sustitución de caracteres.
Prueba esto:
employeeNode.InnerXml = "<Demographic><Age/><DOB/></Demographic>";
Alternativamente (si tiene otro documento XML que desea usar):
employeeNode.AppendChild(employeeNode.OwnerDocument.ImportNode(otherXmlDocument.DocumentElement, true));
Sugiero usar XmlDocument.CreateDocumentFragment si tiene los datos en cadenas de forma libre. Todavía tendrá que usar AppendChild para agregar el fragmento a un nodo, pero tiene la libertad de construir el XML en su StringBuilder.
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(@"<MyXml><Employee></Employee></MyXml>");
XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment();
xfrag.InnerXml = @"<Demographic><Age/><DOB/></Demographic>";
xdoc.DocumentElement.FirstChild.AppendChild(xfrag);
Nada de esto me funcionaba, así que jugué un poco y esta es mi solución.
Primero cargue un campo de texto (puede ponerlo a visible = falso en la versión pública) cargue los datos en el campo de texto de esa manera.
string Path = Directory.GetCurrentDirectory() + "/2016";
string pathFile = Path + "/klanten.xml";
StreamReader sr = new StreamReader(pathFile);
txt.Text = sr.ReadToEnd();
sr.Close();
en el botón Guardar, cargue el campo de texto y guárdelo. No olvides que deberás actualizar el campo de texto después de eso. Si deseas agregar varias direcciones / nombres, no he incluido esa parte.
string name = Globals.s_Name;
string klanten = txt.Text;
string s = klanten;
XmlDocument xdoc = new XmlDocument();
string klant = "<voornaam>" + naamBox1.Text + "</voornaam>";
xdoc.LoadXml(s);
XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment();
xfrag.InnerXml = klant;
xdoc.DocumentElement.FirstChild.AppendChild(xfrag);
xdoc.Save(name + "/klanten.xml");
Todo lo que hago es crear un nuevo objeto de conjunto de datos y abrir el archivo xml usando ReadXML myDataset.ReadXML(path and file name)
.
A continuación, agregue o elimine las filas que necesito y guarde el documento nuevamente utilizando myDataset.WriteXML(path and file name)
.
Adiós.