代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何使用c将子节点添加到XML文件中的根元素#

  •  2
  • Thorin Oakenshield  · 技术社区  · 15 年前

    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>
    

    请给我一个解决办法

    提前谢谢

    3 回复  |  直到 15 年前
        1
  •  3
  •   Pranay Rana    15 年前

    我认为问题来了,因为您在根和测试中都使用了相同的节点元素,所以创建克隆并添加它。

    XmlElement XEle = XDOC.CreateElement("Child");
    XEle.SetAttribute("Name", Str[Index]);
    TestChild.AppendChild(XEle);
    RootNode.AppendChild(XEle.Clone());
    
        2
  •  2
  •   Iale    15 年前

    试试这个:

                XmlElement cpyXEle = XEle.Clone() as XmlElement;
                TestChild.AppendChild(XEle);
                RootNode.AppendChild(cpyXELe);
    
        3
  •  0
  •   Chris    15 年前

    正如其他人所说,您需要克隆节点。在这种情况下,不清楚的原因是节点只能出现在DOM树的一个位置。最初你把它放在孩子身上,然后在下一行,当你把它放在根上的时候,它把它从孩子移到了根上。当你问这个节点当前的父节点是什么时,如果你考虑它会告诉你什么,这是有意义的-它只能给出一个答案…