2013-02-19 9 views
5

あなたは少し助けてくれることを願っています。私はXMLファイルに書き込もうとしていますが、XMLファイルに書き込むメソッドを書くのに苦労しています。これは、(メモ帳++などを使用して)手動で記述されたXMLファイルです:XDocumentを使ってXMLに書き込むことができますが、どこに書き込むかはわかります

<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を使用していることを書くことです。

アプリケーションでは、ユーザーはXMLファイルの名前を選択します。それは、ユーザが保存したい場所を尋ねられたときに、プロセスの中でさらに一時フォルダに保存されます。ファイルの希望の名前を入力して「作成」をクリックすると、「createAndLoadXML」というメソッドが実行されます。その名前が示唆するように、XMLファイルを作成してロードします(フォーム上のリストビューコントロールを設定するため)。コードは以下で見ることができます。ユーザ入力のための4つのテキストボックスであり、さらに、この形態下今

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つのフィールドを属性としてこのXMLファイルに書き込みます。これまでのところ、私はひどく不完全で、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(); 
    } 
} 

基本的に、ユーザーがテキストボックスコントロールに入力したデータをXMLに書き込む上記の方法を教えてもらえますか?私は以前に作成したXMLドキュメント(createAndLoadXMLメソッドから)をロードする方法と、LINQ to XMLを使用してルート要素(ソフトウェア)内に書き込む方法がわかりません。

+0

あなたの最善の策は、フォームから記入xattributesで新しいXElementオブジェクトを作成し、XDocumntとして全体のXMLを読み込むメモリにXDocumentに追加し、既存のXMLファイルの上にそれを保存だろう。 – jzm

+0

提案していただきありがとうございます。 – CSF90

答えて

8

これを試してください。私はこの方法の前にcreateAndLoadXMLを呼び出しているので、XMLが前もって存在すると仮定して、あなたが望むものを得るべきだと思います。私はNotePad ++でこれを書いたので、私は1つまたは2つのエラーがあるかもしれません。

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メソッドのユーザー入力に依存するため(変数configPathが表示されます)、それを使用できますか?再度、感謝します。 – CSF90

+0

彼は、ファイルへの正しいパスが何であれ、「FILE_PATH」の代わりに使用していると言っています。 –

+0

ああ。申し訳ありませんが、私は昨晩かなり遅く投稿し、私の心は少しばかりでした。 JustinとJohnに非常に感謝します。 – CSF90

関連する問題