2013-02-19 9 views
5

Hoffe, Sie können mir ein bisschen helfen. Ich versuche, in eine XML-Datei zu schreiben, aber ich habe Mühe, die Methode zu schreiben, die in die XML-Datei schreibt. Dies ist die XML-Datei manuell geschrieben (mit Notepad ++ etc.):Schreiben in XML mit XDocument, aber zu wissen, wo man schreibt

<software> 
    <software_entry 
    name="Adobe Acrobat X Standard" 
    path="Applications\Acrobat\Acrobat X Standard\AcroStan.msi" 
    type="msi" 
    switches="/qn ALLUSERS=1" 
    /> 

    <software_entry 
    name="Adobe Acrobat X Professional" 
    path="Applications\Acrobat\Acrobat X Pro\AcroPro.msi" 
    type="msi" 
    switches="/qn ALLUSERS=1" 
    /> 
</software> 

Ziel dieses Teils der Anwendung ist, zu schreiben, dass eine GUI.

In der Anwendung wählt der Benutzer den Namen der XML-Datei. Sie wird dann im temporären Ordner gespeichert, bis der Benutzer gefragt wird, wo er ihn speichern möchte. Nachdem Sie den gewünschten Namen der Datei eingegeben und auf "Erstellen" geklickt haben, wird die Methode "createAndLoadXML" ausgeführt. Wie der Name vermuten lässt, erstellt und lädt er eine XML-Datei (um ein Listview-Steuerelement in das Formular einzufügen). Code kann unten gesehen werden.

private void createAndLoadXML() 
{ 
    // Method to create XML file based on name entered by user 
    string tempPath = Path.GetTempPath(); 
    string configFileName = fileNameTextBox.Text; 
    string configPath = tempPath + configFileName + ".xml"; 
    // Create XDocument 
    XDocument document = new XDocument(
     new XDeclaration("1.0", "utf8", "yes"), 
     new XComment("This XML file defines the software selections for use with the Software Installer"), 
     new XComment("XML file generated by Software Installer"), 
     new XElement("software", 
      new XElement("software_entry", 
       new XAttribute("name", ""), 
       new XAttribute("path", ""), 
       new XAttribute("type", ""), 
       new XAttribute("switches", "")) 
       ) 
     ); 
    document.Save(configPath); 
    configCreateLabel.Visible = true; 
    document = XDocument.Load(configPath); 
} 

nun weiter unten auf dieser Form sind vier Textfelder für Benutzereingaben, die jeweils auf die angelegten Attribute beziehen (Name, Pfad, Art und Schalter) Die Idee ist, wird der Benutzer in diese Textfelder schreiben, klicken Sie auf eine 'Hinzufügen' und dann schreibt das Programm diese 4 Felder als Attribute in diese XML-Datei. Bisher habe ich diesen Code, der schrecklich unvollständig ist und nicht einmal LINQ to XML verwendet.

private void writeToXML() 
{ 
    // Method to write lines to XML file based on user input 
    // Sets string variables 
    string fileName = softwareNameTextBox.Text; 
    string filePath = filePathTextBox.Text; 
    string fileType = installerType.Text.ToString(); 
    string installSwitches = installSwitchesTextBox.Text; 
    using (XmlWriter xw = XmlWriter.Load(configPath)) //This line is wrong, I know 
    { 
     xw.WriteStartElement("software"); 
     xw.WriteElementString("name", fileName); 
     xw.WriteElementString("path", filePath); 
     xw.WriteElementString("type", fileType); 
     xw.WriteElementString("switches", installSwitches); 
     xw.WriteEndElement(); 
    } 
} 

Grundsätzlich könnte jemand mir bitte mit dem obigen Verfahren helfen, die die Daten an der XML schreibt der Benutzer in das Textfeld-Steuerelemente eingegeben hat? Ich bin mir nicht sicher, wie ich das zuvor erstellte XML-Dokument (von meiner createAndLoadXML-Methode) laden soll und wie ich innerhalb des Wurzelelements (Software) mit LINQ to XML schreiben kann.

+0

Ihre beste Wette wäre die gesamten XML als XDocumnt sein laden, erstellen Sie die neue XElement mit dem xattributes aus Ihrem Formular ausgefüllt, fügen Sie es den XDocument im Speicher, es dann über die vorhandene XML-Datei speichern. – jzm

+0

Danke für den Vorschlag. – CSF90

Antwort

8

Probieren Sie es aus. Ich denke, das sollte Ihnen das bringen, was Sie wollen, vorausgesetzt, das XML existiert bereits, da Sie vor dieser Methode createAndLoadXML aufrufen. Ich habe dies in NotePad ++ geschrieben, daher habe ich vielleicht einen oder zwei Fehler.

private void writeToXML() 
{ 
    // Method to write lines to XML file based on user input 
    // Sets string variables 
    string fileName = softwareNameTextBox.Text; 
    string filePath = filePathTextBox.Text; 
    string fileType = installerType.Text.ToString(); 
    string installSwitches = installSwitchesTextBox.Text; 

    string FILE_PATH = "bla.xml"; 

    XDocument xDoc = XDocument.Load(FILE_PATH); 

    xDoc.Root.Add(new XElement("software_entry", 
        new XAttribute("name", fileName), 
        new XAttribute("path", filePath), 
        new XAttribute("type", fileType), 
        new XAttribute("switches", installSwitches) 
       )); 
    xDoc.Save(FILE_PATH); 
} 
+0

Danke für die Antwort - ich verstehe die Zeichenfolge FILE_PATH nicht. Was sollte das bei mir sein? Weil der Dateipfad der XML-Datei von der Benutzereingabe in meiner createAndLoadXML-Methode abhängt (Sie können die Variable configPath sehen). Kann ich das einfach verwenden? Danke noch einmal. – CSF90

+0

Er sagt, was auch immer der richtige Pfad zu der Datei ist - verwenden Sie es anstelle von "FILE_PATH". –

+0

Ah richtig. Entschuldigung, ich habe letzte Nacht ziemlich spät gepostet und meine Gedanken waren ein wenig verschwommen. Vielen Dank Justin und John. – CSF90