C#, XML, Hinzufügen neuer Knoten

C#, XML, Hinzufügen neuer Knoten

Ihr erstes Problem besteht darin, dass die Knotennamen in Ihrem XPath nicht mit denen des XML übereinstimmen. Bei XML wird zwischen Groß- und Kleinschreibung unterschieden, daher müssen Sie Root verwenden , nicht root :

XmlNode root = xmldoc.SelectSingleNode("/ns:Root/ns:profesori", nsMgr);

Als nächstes statt xmldoc.NamespaceURI verwenden Sie den tatsächlichen Namensraum uri:

string strNamespace= "http://prpa.org/XMLSchema1.xsd";
nsMgr.AddNamespace("ns", strNamespace);

oder tun Sie dies:

string strNamespace= xmldoc.DocumentElement.NamespaceURI;
nsMgr.AddNamespace("ns", strNamespace);

Der NamespaceURI eines XmlDocument Objekt wird immer ein leerer String sein.

Und diesen Namensraum sollten Sie auch beim Erstellen Ihrer Elemente verwenden:

XmlNode prof = xmldoc.CreateNode(XmlNodeType.Element, "profesor", strNamespace);

XmlNode ime = xmldoc.CreateNode(XmlNodeType.Element, "ime", strNamespace);
ime.InnerText = name;
prof.AppendChild(ime);

XmlNode prezime = xmldoc.CreateNode(XmlNodeType.Element, "prezime", strNamespace);
prezime.InnerText = surname;
prof.AppendChild(prezime);

root.AppendChild(prof);

Sie können auch den CreateElement() verwenden Methode, die etwas kürzer wäre:

XmlNode prof = xmldoc.CreateElement("profesor", strNamespace);

Oder ich bevorzuge die Verwendung eines XmlWriter:

using(XmlWriter writer = root.CreateNavigator().AppendChild())
{
    writer.WriteStartElement("profesor", strNamespace);
    writer.WriteElementString("ime", strNamespace, name);
    writer.WriteElementString("prezime", strNamespace, surname);
    writer.WriteEndElement();
}