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

How*_*ler 30 c# xml

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

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

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

例如:原始XmlDoc:

<MyXml>
   <Employee>
   </Employee>
</MyXml>
Run Code Online (Sandbox Code Playgroud)

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

<MyXml>
   <Employee>
      <Demographic>
         <Age/>
         <DOB/>
      </Demographic>
   </Employee>
</MyXml>
Run Code Online (Sandbox Code Playgroud)

use*_*116 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);
Run Code Online (Sandbox Code Playgroud)


Pan*_*nos 11

试试这个:

employeeNode.InnerXml = "<Demographic><Age/><DOB/></Demographic>";
Run Code Online (Sandbox Code Playgroud)

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

employeeNode.AppendChild(employeeNode.OwnerDocument.ImportNode(otherXmlDocument.DocumentElement, true));
Run Code Online (Sandbox Code Playgroud)


Ech*_*orm 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");
Run Code Online (Sandbox Code Playgroud)