作为学习练习,我构建了一个简单的服务器IP存储和ping监视器应用程序。该应用程序从xml文件中读取服务器/主机列表,并将它们显示给用户,并允许他们ping通它们以检查其在线状态。无法保存对xml文件的更改
读取和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功能,但我似乎无法看到我错过了什么。
谢谢你的史蒂夫!虽然这不完全是解决方案,但它使我能够找出问题所在!我不小心将
serverlist.xml
文件的“复制到输出目录”属性设置为“始终复制”而不是“复制,如果更新”,所以每次构建和调试时都会覆盖文件,并带有新的未经编辑的副本。为了让我的代码更好,更实用,我实施了一些您建议的更改。 – markhlong 2013-05-09 14:25:43@markhlong - 不客气!很高兴我能帮上忙。 – 2013-05-09 16:04:31