1

学習課題として、単純なサーバー IP ストレージと ping 監視アプリケーションを構築しています。このアプリケーションは、xml ファイルからサーバー/ホストのリストを読み取り、それらをユーザーに表示し、ping を実行してオンライン ステータスを確認できるようにします。

読み取りおよび ping 機能は正常に動作しますが、追加のサーバー インスタンスを追加するコードを記述すると、コードは新しい要素を xml ファイルに保存しません。

の基本的な XML 構造は次のserverlist.xmlとおりです。

<servers>
  <server name="Operations">
      <hostname>Operations</hostname>
      <hostaddress>address</hostaddress>
  </server>
  <server name="Development">
      <hostname>development</hostname>
      <hostaddress>address</hostaddress>
  </server>
</servers>

server新しい要素を追加するために使用したコードは次のとおりです。

private void btnAdd_Click(object sender, EventArgs e)
        {
            XDocument xDocument = new XDocument();
            try
            {
                if (txtHostName.Text == "" || txtHostAddress.Text == "")
                {
                    MessageBox.Show("Please complete the fields shown!", "Complete form", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    // Add element to XML
                    if (File.Exists("serverlist.xml"))
                    {
                        xDocument = XDocument.Load("serverlist.xml");
                    }
                    else
                    {
                        MessageBox.Show("No XML available!", "Error", MessageBoxButtons.OK);
                    }

                    XElement newServer = new XElement("server", txtServerName.Text,
                            new XElement("hostname", txtHostName.Text),
                            new XElement("hostaddress", txtHostAddress.Text));

                    xDocument.Root.Add(newServer);


                    xDocument.Save("Serverlist.xml");
                    MessageBox.Show("Server Added!", "Server Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            }

エラーや catch 句は表示されません。要素が XML に保存されていないだけです。これはおそらく非常に単純で愚かなことですが、私は多くのグーグル検索 (他の検索エンジンが利用可能です!) と XML 関数の調査を行いましたが、見落としているものを見つけることができないようです。

4

2 に答える 2

1

「serverList.xml」ファイルに有効な XML ドキュメントが含まれている場合、XML 保存コードは正常に機能します。

いくつかの提案があります:

  1. serverList.xml ファイルが存在しない場合は、"No XML Available!" の後に戻ります。MessageBox または新しい XDocument を作成します (以下を参照)

  2. SetAttribute("name", txtServerName.Text) を使用して、name="Operations" 属性を作成します。

  3. 正しい「serverList.xml」ファイルを見ていることを確認してください。「serverList.xml」は、実行中の .exe と同じフォルダーにある必要があります。デバッグしている場合は、「serverList.xml」 --> $(ProjectDir)\bin\Debug\serverList.xml

    private void button1_Click(object sender, EventArgs e)
    {
      XDocument xDocument = new XDocument();
        try
        {
            // Add element to XML
            if (File.Exists(@"C:\Projects\serverlist.xml"))
            {
                xDocument = XDocument.Load(@"C:\Projects\ServerList.xml");
            }
            else
            {
                MessageBox.Show("No XML available!", "Error", MessageBoxButtons.OK);
    
                // create new document
                xDocument.Add(new XElement("servers"));
            }                
    
            XElement newServer = new XElement("server",
                    new XElement("hostname", txtHostName.Text),
                    new XElement("hostaddress", txtHostAddress.Text));
            newServer.SetAttributeValue("name", txtServerName.Text);
    
            xDocument.Root.Add(newServer);
    
            xDocument.Save(@"C:\Projects\Serverlist.xml");
            MessageBox.Show("Server Added!", "Server Added", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.ToString(), "Error");
        }
    }
    
于 2013-05-09T12:30:42.100 に答える