2013-02-19 32 views
5

Hy vọng bạn có thể giúp tôi một chút. Tôi đang cố gắng viết vào một tệp XML, nhưng tôi đang cố gắng viết phương thức đó, tốt, ghi vào tệp XML. Đây là tệp XML được viết bằng tay (bằng Notepad ++, v.v.):Viết cho XML bằng cách sử dụng XDocument, nhưng biết nơi để viết

<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> 

Mục đích của phần này là viết bằng GUI.

Trong ứng dụng, người dùng chọn tên của tệp XML. Sau đó nó được lưu trong thư mục tạm thời cho đến khi tiếp tục trong quá trình khi người dùng được hỏi nơi họ muốn lưu nó. Sau khi nhập tên mong muốn của tệp và nhấp vào Tạo, phương thức được gọi là "createAndLoadXML" được chạy. Như tên của nó sẽ gợi ý, nó tạo ra và sau đó tải một tập tin XML (để cư trú một điều khiển listview trên biểu mẫu). Mã có thể được nhìn thấy dưới đây.

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); 
} 

Bây giờ, tiếp tục xuống mẫu đơn này là 4 hộp văn bản cho người dùng nhập vào, từng liên quan đến các thuộc tính tạo ra (tên, đường dẫn, gõ và chuyển mạch) Ý tưởng là người dùng sẽ viết trong các hộp văn bản, nhấp vào một Nút 'Thêm' và sau đó chương trình sẽ viết 4 trường đó làm thuộc tính cho tệp XML này. Cho đến nay, tôi có mã này, đó là khủng khiếp không đầy đủ và thậm chí không sử dụng LINQ to XML.

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(); 
    } 
} 

Về cơ bản, bất cứ ai có thể vui lòng giúp tôi với phương pháp trên ghi dữ liệu XML người dùng đã nhập vào điều khiển hộp văn bản? Tôi không chắc chắn làm thế nào để tải các tài liệu XML được tạo ra trước đó (từ phương thức createAndLoadXML của tôi), và làm thế nào để viết trong phần tử gốc (phần mềm) bằng cách sử dụng LINQ to XML.

+0

Đặt cược của bạn tốt nhất là tải toàn bộ XML như một XDocumnt, tạo XElement mới với xattributes điền từ hình thức của bạn, thêm nó vào XDocument trong bộ nhớ, sau đó lưu nó trong tập tin xml hiện có. – jzm

+0

Cảm ơn bạn đã đề xuất. – CSF90

Trả lời

8

Hãy dùng thử. Tôi nghĩ rằng điều này sẽ giúp bạn có được những gì bạn muốn giả định XML tồn tại trước khi bạn gọi createAndLoadXML trước phương thức này. Tôi đã viết điều này trong NotePad ++, vì vậy tôi có thể có một hoặc hai lỗi.

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

Cảm ơn bạn đã trả lời - Tôi không hiểu chuỗi FILE_PATH. Điều gì sẽ xảy ra trong trường hợp của tôi? Bởi vì đường dẫn tệp của tệp XML phụ thuộc vào đầu vào của người dùng trong phương thức createAndLoadXML của tôi (bạn có thể thấy biến configPath) Tôi có thể sử dụng nó không? Cảm ơn một lần nữa. – CSF90

+0

Anh ấy nói bất kỳ đường dẫn chính xác nào tới tệp là - hãy sử dụng nó thay vì "FILE_PATH". –

+0

Ah phải. Xin lỗi, tôi đã đăng khá trễ tối qua và đầu óc tôi hơi mờ. Cảm ơn rất nhiều Justin và John. – CSF90

Các vấn đề liên quan