将多个子节点添加到父节点

时间:2011-04-13 11:16:35

标签: c# xml linq-to-xml

我正在尝试使用我正在收集的数据创建XML文件,但是对于特定的我需要生成多个子标记

所以我希望有这样的事情: -

<Feedbacks>
   <Feedback>
     <Name></Name>
     <Surname></Surname>
     <Images>
       <Image></Image>
       <Image></Image>
       <Image></Image>
     </Images>
   </Feedback>
</Feedbacks>

很抱歉不知道如何在这里粘贴正确的XML文件,但我认为你明白了。目前我有这个代码正在运行: -

    private static void CreateFeedbackXMLFile()
    {
        XmlDocument doc = new XmlDocument();
        XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(docNode);

        XmlNode Node = doc.CreateElement("Feedbacks");
        doc.AppendChild(Node);

        string fileName = "Feedback.xml";
        string filePath = Properties.Settings.Default.DefaultFolder + "\\" + fileName;

        doc.Save(filePath);
    }

    public static void InsertFeedback(Feedback feedback)
    {
        CreateFeedbackXMLFile();

        string filePath = Properties.Settings.Default.DefaultFolder + "\\Feedback.xml" ;
        XDocument xmlDoc = XDocument.Load(filePath);
        XElement XParentElement = new XElement("Feedback");

        InsertIntoXMLDoc(feedback, filePath, xmlDoc);
    }


    private static void InsertIntoXMLDoc(Feedback feedback, string filePath, XDocument xmlDoc)
    {

        xmlDoc.Element("Feedbacks").Add(new XElement("Feedback",
                                        new XElement("Name", feedback.Name),
                                        new XElement("Surname", feedback.Surname),
                                        new XElement("Email", feedback.Email),
                                        new XElement("Website", feedback.Website),
                                        new XElement("Suggestion", feedback.Suggestion),
                                        new XElement("Error", feedback.Error),
                                        new XElement("MailingList", feedback.MailingList),
                                        new XElement("Comments", feedback.Comments)
                            ));

        }
        xmlDoc.Save(filePath);
    }

现在我需要遍历imageList并根据我有多少图像创建节点。

感谢您的帮助和时间

1 个答案:

答案 0 :(得分:2)

循环是你想要的方式。事实上,没有“无环路”的方法来实现这一目标。但是,您可以将循环伪装成LINQ查询,如下所示:

xmlDoc.Element("Feedbacks").Add(
    /* All the elements before your image list */
    XElement("images", 
        from img in myImageList select new XElement(...)
    )
    /* All the elements after your image list, preceeded by a comma */
);

当然,您需要将myImageList替换为实际的图片集。请注意,如果您有ImageList控件,则实际集合不是控件本身,而是其Images属性。

此外,在...上,您需要放置用于从图像创建每个节点的任何逻辑(使用自动键入的局部变量img来引用相应的图像对于每个节点)。