Hinzufügen von mehreren untergeordneten Knoten an den Übergeordneten Knoten
Ich versuche zu erstellen und die XML-Datei mit Daten, die ich bin, zu sammeln, jedoch für einen bestimmten brauche ich mehrere sub-tags generiert werden
So, ich wünschte, so etwas zu haben:-
<Feedbacks>
<Feedback>
<Name></Name>
<Surname></Surname>
<Images>
<Image></Image>
<Image></Image>
<Image></Image>
</Images>
</Feedback>
</Feedbacks>
Sorry weiss nicht wie einfügen, um den entsprechenden XML-Datei hier, aber ich denke, Sie bekommen die Idee. Im moment habe ich diesen code, der funktioniert:-
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);
}
Nun muss ich eine Schleife durch die Listenansicht und erstellen von nodes nach, wie viele Bilder die ich habe.
Vielen Dank für Ihre Hilfe und Zeit
Sie können die code-tags zum einfügen der xml-Datei.
InformationsquelleAutor Johann | 2011-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Looping ist der Weg zu gehen für das, was Sie versuchen. In der Tat, es gibt keine "loopless" Weg, das zu erreichen. Sie können jedoch verschleiern die Schleife als
LINQ
Abfrage, mit so etwas wie dies:Natürlich, werden Sie brauchen, um zu ersetzen
myImageList
mit Ihrer aktuellen Sammlung von Bildern. Beachten Sie, dass wenn Sie eineImageList
Kontrolle, die tatsächliche Erfassung ist nicht die Kontrolle an sich, sondern seineImages
Eigenschaft.Auch, auf die
...
müssen Sie zu setzen, was Logik Sie verwenden, um zu erstellen, die jedem Knoten aus einen Bild (mit dem auto-typisierte lokale variableimg
zu finden, um das passende Bild für jeden Knoten).Codierung base64 ist der vernünftigste Weg, um das Bild zu speichern auf der XML. Um ihn wieder anzuzeigen, müssen Sie create eine neue
Image
mit den wiederhergestellten Daten aus der XML-Datei. Das Problem hier ist, dass dieImage
Klasse ist Abstrakt, so müssen Sie eine Ihrer Unterklassen ist. WahrscheinlichBitmap
tun. Da keiner der Konstruktoren nehmen einen byte-array (das, was man zurück bekommen, von der Dekodierung der b64-Daten), müssen Sie erstellen Sie ein MemoryStream mit füttern an den Konstruktor übergeben. Die vollständigen Angaben sind zu lang für einen Kommentar, so probieren Sie es und erstellen Sie eine neue Frage, wenn Sie noch mehr Fragen 😉Geschafft, wieder das Bild und zeigen Sie es aus dem stream! byte[] mydata = Konvertieren.FromBase64String(strResult); System.IO.MemoryStream stream = new System.IO.MemoryStream(mydata); vielen Dank herenvardo für Ihren ausgezeichneten Beitrag
Die ToArray ist nicht nötig, den Konstruktor von
XElement
dauertparams Object[] content
Bedeutung, die Sie übergeben können eine beliebige Anzahl von .NET-Objekte. Und msdn.microsoft.com/en-us/library/bb943882.aspx erklärt, dass ein möglicher Typ für das hinzufügen von komplexen Inhalten, ist "Jede Art implementiert IEnumerable<T>: Wenn ein Objekt implementiert IEnumerable<T>, die Sammlung in das Objekt aufgelistet wird, und alle Elemente in der Auflistung Hinzugefügt werden". So ToArray ist nicht nötig.danke, behoben. Ich Frage mich, was macht die "Magie": ein
params
argument ist ausdrücklich beschränkt auf arrays, und ich finde keine überladungen des Konstruktors eigentlich unter denIEnumerable
. Gibt es etwas, das nicht in der Dokumentation oder einfach nur die compiler dabei einige special-Gehäuse dieser Arten?InformationsquelleAutor Edurne Pascual