2013-02-19 13 views
5

Umarım bana biraz yardımcı olabilirsiniz. Bir XML dosyasına yazmaya çalışıyorum, ama XML dosyasına yazdığı yöntemi yazmaya çalışıyorum.XDocument kullanarak XML'ye yazmak, ancak nerede yazılacağını bilmek

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

başvurunun bu bölümünün amacı bir GUI kullanarak bu yazmaktır: Bu elle (vb ++ Notepad kullanarak) yazılı XML dosyasıdır.

Uygulamada, kullanıcı XML dosyasının adını seçer. Daha sonra kullanıcı, saklamak istedikleri yere sorulduğunda, geçici klasöre kaydedilir. Dosyanın istenen adını girip Oluştur'u tıkladığınızda, "createAndLoadXML" adlı yöntem çalıştırılır. Adından da anlaşılacağı gibi, bir XML dosyası oluşturur ve yükler (form üzerindeki bir liste görünümü kontrolünü doldurmak için). Kod aşağıda görülebilir. kullanıcı girişi için 4 metin kutuları vardır ayrıca bu forma aşağı Şimdi

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

, yaratılan nitelikler (isim, yol, tipi ve anahtarlar) fikri bu metin kutularına yazacak kullanıcı ilişkin her bir tıklayın 'Ekle' düğmesine basınca program bu 4 alanı bu XML dosyasına öznitelik olarak yazacaktır. Şimdiye kadar, bu kod var, ki bu da çok eksik ve LINQ'ı XML'e bile kullanmıyor.

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

Temelde, herkes XML kullanıcı metin kutusu denetimleri girmiştir verileri yazar yukarıdaki yöntemle lütfen bana yardımcı olabilir? Önceden oluşturulan XML belgesini (createAndLoadXML yöntemimden) nasıl yükleyeceğimi ve LINQ to XML kullanarak kök öğesi (yazılım) içinde nasıl yazılacağımı bilmiyorum.

+0

Yapabileceğiniz en iyi şey, sizin formdan dolduran xattributes ile yeni XElement oluşturmak, bir XDocumnt olarak bütün XML yüklemek bellekte XDocument ekleyebilir daha sonra mevcut xml dosyanın üzerine kaydetmek olacaktır. – jzm

+0

Öneriniz için teşekkürler. – CSF90

cevap

8

Bunu deneyin. Bu yöntemden önce, createAndLoadXML numaralı telefonu aradığınızdan önce, XML'in önceden var olduğunu varsaymak istediğinizi almam gerektiğini düşünüyorum. Bunu NotePad ++ 'da yazdım, bu yüzden bir ya da iki hatam olabilir.

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

Cevabınız için teşekkürler - FILE_PATH dizesini anlamıyorum. Benim durumumda ne olmalı? XML dosyasının dosya yolu, benim createAndLoadXML yöntemimde kullanıcı girdisine bağlı olduğundan (configPath değişkenini görebilirsiniz) Sadece bunu kullanabilir miyim? Tekrar teşekkürler. – CSF90

+0

Dosyanın doğru yolu ne olursa olsun diyor - "FILE_PATH" yerine onu kullanın. –

+0

Ah doğru. Üzgünüm, dün gece epey geç kaldım ve aklım biraz bulanıktı. Çok teşekkürler Justin ve John. – CSF90