读取和写入XML数据

时间:2013-08-19 06:30:02

标签: c# xml

我一直在修补这个项目一段时间,我遇到了一堵砖墙。这是我的第一个项目,我真的不知道从哪里开始。我正在努力阅读下一步的内容,所以我不必再在这里发帖,但似乎我别无选择。

无论如何,这里有一个简短的解释,说明我想用这个项目完成什么。我试图从已经存在的XML文档中的三个元素中检索某些值。在我将每个元素的每个值加载到它的相应文本框之后,我然后尝试将值的任何更改保存到文档中。 (更容易说完成了!)

我正在使用XDocument将值存储到列表中,然后将它们显示到文本框中。

我无法弄清楚如何将更改更新回原始值并保存。到目前为止,尝试保存使用空白XML文档并使我的应用程序崩溃。 :\

以下是我可以阅读和显示的XML数据:

<client>
  <endpoint address="http://127.0.0.1:8086">
  <endpoint address="http://127.0.0.1:8084">
  <endpoint address="net.tcp://127.0.0.1:8085">
</client>

这是我到目前为止编写的一些代码。

    OpenFileDialog AgentConfig = new OpenFileDialog();

    private void button1_Click(object sender, EventArgs e)
    {

        AgentConfig.Filter = "Agent.exe.config (*.config)|*.config";
        if (AgentConfig.ShowDialog() == DialogResult.OK)
        {
            textBox1.Text = AgentConfig.FileName;
        }

        var addresses = XDocument.Load(AgentConfig.FileName)
                     .Descendants("endpoint")
                     .Select(x => (string)x.Attribute("address"))
                     .ToList();

        textBox2.Text = addresses[0];
        textBox3.Text = addresses[1];
        textBox4.Text = addresses[2];

        if (textBox2.Text != addresses[0])
        {
            addresses[0] = textBox2.Text;
        }

        if (textBox3.Text != addresses[1])
        {
            addresses[1] = textBox3.Text;
        }

        if (textBox4.Text != addresses[2])
        {
            addresses[3] = textBox4.Text;
        }


    }

    private void button2_Click(object sender, EventArgs e)
    {
        SaveFileDialog SF = new SaveFileDialog();
        if (SF.ShowDialog() == DialogResult.OK)
        {

        }
    }

任何帮助都一定会受到赞赏。

提前致谢!

3 个答案:

答案 0 :(得分:1)

var xElem = new XElement("client",
    new XElement("endpoint", new XAttribute("address", textBox2.Text)),
    new XElement("endpoint", new XAttribute("address", textBox3.Text)),
    new XElement("endpoint", new XAttribute("address", textBox4.Text)));

xElem.Save(filename);

答案 1 :(得分:0)

一种方法可能是使用以下类:

class System.Data.DataSet 

表示内存中的数据缓存,请参阅documentation

class System.IO.StramWriter  

实现TextWriter以便以特定编码将字符写入流,请参阅documentation

那么就这样:

DataSet ds = newDataSet();
CreateMyDataSet("your arguments"); // Create your DataSet according to your xml-format
StreamWriter sw = new StreamWriter(SaveFileDialog.FileName, ...);
sw.Write(ds.GetXml());  // GetXml() returns the xml representation of your data
sw.Close();  

答案 2 :(得分:-1)

尝试使用Xml编写器进行保存。这是一个链接

[链接] http://www.dotnetperls.com/xmlwriter