2013-02-19 32 views
5

लिखना कहां है, आशा है कि आप मेरी मदद कर सकते हैं। मैं एक एक्सएमएल फाइल को लिखने की कोशिश कर रहा हूं, लेकिन विधि लिखने के लिए संघर्ष कर रहा हूं, ठीक है, एक्सएमएल फाइल को लिखता है।एक्सडी दस्तावेज़ का उपयोग कर एक्सएमएल को लिखना, लेकिन

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

आवेदन के इस भाग का उद्देश्य एक GUI का उपयोग कर कि लिखने के लिए: यह मैन्युअल रूप से लिखा (Notepad ++ का उपयोग कर आदि) एक्सएमएल फ़ाइल है।

एप्लिकेशन में, उपयोगकर्ता XML फ़ाइल का नाम चुनता है। तब तब प्रक्रिया में आगे तब तक अस्थायी फ़ोल्डर में सहेजा जाता है जब उपयोगकर्ता से पूछा जाता है कि वे इसे कहां से सहेजना चाहते हैं। फ़ाइल के वांछित नाम दर्ज करने और बनाने पर क्लिक करने पर, "createAndLoadXML" नामक विधि चलायी जाती है। जैसा कि इसका नाम सुझाएगा, यह बनाता है और फिर एक एक्सएमएल फ़ाइल लोड करता है (फॉर्म पर एक सूचीदृश्य नियंत्रण को पॉप्युलेट करने के लिए)। कोड नीचे देखा जा सकता है।

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

, आगे इस फार्म नीचे उपयोगकर्ता इनपुट के लिए 4 पाठ बॉक्स हैं, गुण बनाया (नाम, पथ, प्रकार और स्विच) विचार उपयोगकर्ता इन टेक्स्ट बॉक्स में लिखेंगे है से संबंधित प्रत्येक, एक क्लिक 'जोड़ें' बटन और फिर प्रोग्राम उन 4 फ़ील्ड को इस XML फ़ाइल में विशेषताओं के रूप में लिख देगा। अब तक, मेरे पास यह कोड है, जो बहुत अपूर्ण है और LINQ से 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(); 
    } 
} 

असल में, क्या कोई मुझे उपर्युक्त विधि के साथ मदद कर सकता है जो एक्सएमएल को टेक्स्ट बॉक्स नियंत्रण में डेटा दर्ज करने वाले डेटा को लिखता है? मुझे यकीन नहीं है कि पहले बनाए गए XML दस्तावेज़ (मेरे createAndLoadXML विधि से) को लोड करने के लिए, और LINQ से XML का उपयोग करके रूट तत्व (सॉफ़्टवेयर) में कैसे लिखना है।

+0

आपका सबसे अच्छा शर्त एक XDocumnt रूप में पूरे एक्सएमएल लोड करते हैं, अपने फ़ॉर्म से भरे xattributes के साथ नए XElement बनाने के लिए, स्मृति में XDocument में जोड़ने, तो मौजूदा xml फ़ाइल पर बचाने के लिए होगा। – jzm

+0

सुझाव के लिए धन्यवाद। – CSF90

उत्तर

8

इसे आज़माएं। मुझे लगता है कि यह आपको प्राप्त करना चाहिए कि आप यह मानना ​​चाहते हैं कि एक्सएमएल पहले से मौजूद है क्योंकि आप इस विधि से पहले createAndLoadXML पर कॉल कर रहे हैं। मैंने इसे नोटपैड ++ में लिखा है, इसलिए मुझे एक त्रुटि या दो हो सकती है।

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

उत्तर के लिए धन्यवाद - हालांकि मुझे स्ट्रिंग FILE_PATH समझ में नहीं आता है। मेरे मामले में यह क्या होना चाहिए? चूंकि XML फ़ाइल का फ़ाइल पथ मेरे createAndLoadXML विधि में उपयोगकर्ता इनपुट पर निर्भर है (आप चर कॉन्फ़िगरेशन देख सकते हैं) क्या मैं इसका उपयोग कर सकता हूं? एक बार फिर धन्यवाद। – CSF90

+0

वह कह रहा है कि फ़ाइल का सही पथ क्या है - इसे "FILE_PATH" के बजाय उपयोग करें। –

+0

आह सही। क्षमा करें, मैंने कल रात बहुत देर से पोस्ट किया और मेरा दिमाग थोड़ा अस्पष्ट था। जस्टिन और जॉन बहुत बहुत धन्यवाद। – CSF90