xml文件具有以下结构
<RootElement>
</RootElement>
我需要将“Child”元素附加到RootElement和TestChild。 为此,我使用以下代码。
List<string> Str = new List<string> {"a","b"};
XmlDocument XDOC = new XmlDocument();
XDOC.Load(Application.StartupPath + "\\Sample.xml");
XmlNode RootNode = XDOC.SelectSingleNode("//RootElement");
XmlNode TestChild = XDOC.CreateNode(XmlNodeType.Element, "TestChild", null);
for (int Index = 0; Index < Str.Count; Index++)
{
XmlElement XEle = XDOC.CreateElement("Child");
XEle.SetAttribute("Name", Str[Index]);
TestChild.AppendChild(XEle);
RootNode.AppendChild(XEle);
}
RootNode.AppendChild(TestChild);
XDOC.Save(Application.StartupPath + "\\Sample.xml");
但是有了这个,我可以将子节点仅附加到RootElement
结果应该是
<RootElement>
<Child Name="a"/>
<Child Name="b"/>
<TestChild>
<Child Name="a"/>
<Child Name="b"/>
</TestChild>
</RootElement>
但现在我变得像
了 <RootElement>
<Child Name="a" />
<Child Name="b" />
<TestChild>
</TestChild>
</RootElement>
请给我一个解决方案来做到这一点
提前致谢
答案 0 :(得分:3)
我认为问题即将来临,因为你在root和test中都使用相同的节点元素,所以创建克隆而不是添加它
XmlElement XEle = XDOC.CreateElement("Child");
XEle.SetAttribute("Name", Str[Index]);
TestChild.AppendChild(XEle);
RootNode.AppendChild(XEle.Clone());
答案 1 :(得分:2)
试试这个:
XmlElement cpyXEle = XEle.Clone() as XmlElement;
TestChild.AppendChild(XEle);
RootNode.AppendChild(cpyXELe);
答案 2 :(得分:0)
正如其他人所说,你需要克隆节点。如果不清楚的原因是该节点只能出现在dom树中的一个位置。最初你把它放在孩子身上,然后当你把它放在根上时,它将它从孩子移到根。如果你想一想当你问它当前的父母是什么时会告诉你什么,这是有道理的 - 它只能给出一个答案......