Добавление нескольких дочерних узлов в родительский узел - PullRequest
1 голос
/ 13 апреля 2011

Я пытаюсь создать и 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 Ответ

2 голосов
/ 13 апреля 2011

Цикл - это путь к тому, что вы пытаетесь. На самом деле, нет никакого «петлевого» способа добиться этого. Однако вы можете замаскировать цикл как запрос 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 для ссылки на соответствующее изображение для каждого узла) .

...