作为一项学习练习,我正在构建一个简单的服务器IP存储和ping监视器应用程序。应用程序从xml文件中读取服务器/主机列表并将其显示给用户,并允许他们ping它们以检查其在线状态。
读取和ping功能正常,但在编写代码以添加其他服务器实例时,代码不会将新元素保存到xml文件中。
以下是serverlist.xml
中的基本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功能的研究,但我似乎无法看到我错过了。
答案 0 :(得分:1)
如果“serverList.xml”文件包含有效的XML文档,则您的XML保存代码可以正常工作。
我有一些建议:
如果serverList.xml文件不存在,请在“No XML Available!”之后返回。 MessageBox或创建一个新的XDocument(见下文)
使用SetAttribute(“name”,txtServerName.Text)创建name =“Operations”属性。
确保您正在查看正确的“serverList.xml”文件。 “serverList.xml”需要与您运行的.exe位于同一文件夹中。如果您正在调试,那么“serverList.xml” - &gt; $(PROJECTDIR)\ BIN \调试\ 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");
}
}
答案 1 :(得分:0)
问题原来是serverlist.xml
文件的“复制到输出目录”属性。这意味着在调试期间构建/重建解决方案时,xml文件的副本被新的未修改的原始xml文件覆盖。所以看起来它根本没有被保存,而它已经被覆盖了。