您的第一个问题是 XPath 中的节点名称与 XML 中的节点名称不匹配。 XML 区分大小写,因此您需要使用Root
, not root
:
XmlNode root = xmldoc.SelectSingleNode("/ns:Root/ns:profesori", nsMgr);
接下来,代替xmldoc.NamespaceURI
,使用实际的命名空间 uri:
string strNamespace= "http://prpa.org/XMLSchema1.xsd";
nsMgr.AddNamespace("ns", strNamespace);
或者这样做:
string strNamespace= xmldoc.DocumentElement.NamespaceURI;
nsMgr.AddNamespace("ns", strNamespace);
的命名空间 URIXmlDocument
对象将始终是一个空字符串。
创建元素时还应该使用此名称空间:
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);
您也可以考虑使用CreateElement()
方法,会稍微短一些:
XmlNode prof = xmldoc.CreateElement("profesor", strNamespace);
或者,我更喜欢使用 XmlWriter:
using(XmlWriter writer = root.CreateNavigator().AppendChild())
{
writer.WriteStartElement("profesor", strNamespace);
writer.WriteElementString("ime", strNamespace, name);
writer.WriteElementString("prezime", strNamespace, surname);
writer.WriteEndElement();
}