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

时间:2008-10-07 15:56:27

标签: c# xml

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

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

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

例如: 原始XmlDoc:

<MyXml>
   <Employee>
   </Employee>
</MyXml>

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

<MyXml>
   <Employee>
      <Demographic>
         <Age/>
         <DOB/>
      </Demographic>
   </Employee>
</MyXml>

6 个答案:

答案 0 :(得分:83)

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

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);

答案 1 :(得分:11)

试试这个:

employeeNode.InnerXml = "<Demographic><Age/><DOB/></Demographic>";

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

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

答案 2 :(得分:6)

作为替代方案,您可以采用更加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");

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

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

再见。

答案 5 :(得分:0)

这些都不适合我,所以我玩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 = "<voornaam>" + naamBox1.Text + "</voornaam>";
        xdoc.LoadXml(s);
        XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment();
        xfrag.InnerXml = klant;
        xdoc.DocumentElement.FirstChild.AppendChild(xfrag);
        xdoc.Save(name + "/klanten.xml");