将XML字符串块附加到现有XmlDocument

我有一个已存在的XmlDocument并从文件中读取。

我想在文档中的节点上添加一块Xml。 是否有一种很好的方法来创建和添加所有节点,而不会使用许多.CreateNote和.AppendChild调用混乱我的代码?

我想要一些方法来创建一个有效的Xml部分的字符串或stringBuilder,并将其附加到XmlNode。

例如:原始XmlDoc:

    

并且,我想在Employee中添加一个人口统计(带有几个孩子)标签:

         

如果您有自由格式字符串中的数据,我建议使用XmlDocument.CreateDocumentFragment 。 您仍然必须使用AppendChild将片段添加到节点,但您可以自由地在StringBuilder中构建XML。

 XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(@""); XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment(); xfrag.InnerXml = @""; xdoc.DocumentElement.FirstChild.AppendChild(xfrag); 

试试这个:

 employeeNode.InnerXml = ""; 

或者(如果您有另一个要使用的XML文档):

 employeeNode.AppendChild(employeeNode.OwnerDocument.ImportNode(otherXmlDocument.DocumentElement, true)); 

作为替代方案,这是你可以用更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"); 

考虑使用XmlWriter在StringBuilder上构建片段,因为这将为您提供validation和字符替换。

这些都不适合我,所以我玩abit,这是我的解决方案。

首先加载一个文本字段(你可以在公共版本中将它设置为visible = false)将数据加载到文本字段中,就像这样。

 string Path = Directory.GetCurrentDirectory() + "/2016"; string pathFile = Path + "/klanten.xml"; StreamReader sr = new StreamReader(pathFile); txt.Text = sr.ReadToEnd(); sr.Close(); 

在保存按钮上加载文本字段并保存它。 不要忘记你必须刷新文本字段后,如果你想添加多个地址/名称,我没有包括那部分。

 string name = Globals.s_Name; string klanten = txt.Text; string s = klanten; XmlDocument xdoc = new XmlDocument(); string klant = "" + naamBox1.Text + ""; xdoc.LoadXml(s); XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment(); xfrag.InnerXml = klant; xdoc.DocumentElement.FirstChild.AppendChild(xfrag); xdoc.Save(name + "/klanten.xml"); 

我所做的就是创建一个新的数据集对象,并使用ReadXML myDataset.ReadXML(path and file name)打开xml文件。

然后添加或删除我需要的行,并使用myDataset.WriteXML(path and file name)再次保存文档。

再见。