如何在同一文件中将类与main方法链接起来

时间:2015-02-03 09:23:48

标签: c# xml linq

这是我第一次使用C#创建程序。我如何GetXMLData然后在更新xml文件中的数据后添加记录?该程序不会返回错误,但我看不到数据ID" 4"已添加到记录中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;


namespace LinQ
{
    class Program
    {
        private string path = "TestData.xml";

        private void GetXMLData()
        {
            XDocument testXML = XDocument.Load(path);
            var students = from student in testXML.Descendants("Student")
                           select new
                           {
                               ID = Convert.ToInt32(student.Attribute("ID").Value),
                               Name = student.Element("Name").Value
                           };

            foreach (var student in students)
            {
                // Do other operations with each student object
            }
        }
        private void InsertXMLData(string name)
        {
            XDocument testXML = XDocument.Load(path);

            XElement newStudent = new XElement("Student",
                                           new XElement("Name", name)
                                       );
            var lastStudent = testXML.Descendants("Student").Last();

            int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
            newStudent.SetAttributeValue("ID", 4);
            testXML.Element("Students").Add(newStudent);
            testXML.Save(path);
        }

        private void UpdateXMLData(string name, int id)
        {
            XDocument testXML = XDocument.Load(path);
            XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();

            cStudent.Element("Name").Value = name;
            testXML.Save(path);
        }

        static void Main(string[] args)
        {
            //GetXMLData();
            //InsertXMLData(string name);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您的主要功能没有做任何事情。

变化

    static void Main(string[] args)
    {
        //GetXMLData();
        //InsertXMLData(string name);


    }

    static void Main(string[] args)
    {
        GetXMLData();
        InsertXMLData("paul");
    }

你还必须使你的方法保持静态。

更改

private void GetXMLData()

private void InsertXMLData(string name)

private void UpdateXMLData(string name, int id)

private static void GetXMLData()

private static void InsertXMLData(string name)

private static void UpdateXMLData(string name, int id)

如果要在不使其成为静态的情况下访问方法,则必须创建对象的实例。 像:

Program myProgram = new Program();
myProgram.GetXMLData();
myProgram.InsertXMLData("paul");

答案 1 :(得分:0)

请为xml文件提供正确的路径或将其保存在exe位置。

以下是编译代码所需的更改

class Program
{

    private static string path = "D:\\TestData.xml";


    static void Main(string[] args)
    {
        GetXMLData();
        InsertXMLData("XYZ");
    }


    private static void GetXMLData()
    {
        // try
        // {
        XDocument testXML = XDocument.Load(path);
        var students = from student in testXML.Descendants("Student")
                       select new
                       {
                           ID = Convert.ToInt32(student.Attribute("ID").Value),
                           Name = student.Element("Name").Value
                       };

        foreach (var student in students)
        {
            // Do other operations with each student object

        }
        //  }
        //catch (Exception err)
        //{
        //    MessageBox.Show(err.Message);
        //}
    }
    private static void InsertXMLData(string name)
    {
        //try
        //{
        XDocument testXML = XDocument.Load(path);

        XElement newStudent = new XElement("Student",
                                       new XElement("Name", name)
                                   );
        var lastStudent = testXML.Descendants("Student").Last();

        int newID = Convert.ToInt32(lastStudent.Attribute("ID").Value);
        newStudent.SetAttributeValue("ID", 4);
        testXML.Element("Students").Add(newStudent);
        testXML.Save(path);
        //}
        //catch (Exception err)
        //{
        //    MessageBox.Show(err.Message);
        //}
    }

    private static void UpdateXMLData(string name, int id)
    {
        //try
        //{
        XDocument testXML = XDocument.Load(path);
        XElement cStudent = testXML.Descendants("Student").Where(c => c.Attribute("ID").Value.Equals(id.ToString())).FirstOrDefault();

        cStudent.Element("Name").Value = name;
        testXML.Save(path);
        //}
        //catch (Exception err)
        //{
        //    MessageBox.Show(err.Message);
        //}
    }
}

答案 2 :(得分:0)

快速查看代码,看来有两个问题可能导致应用程序执行不正确。

首先,

Main()中的方法调用已被注释掉,取消注释(删除前导//)这两种方法。

其次,

函数GetXMLData()InsertXMLData()UpdateXMLData()不是静态的,需要使用类实例。您可以通过添加关键字static或使用类实例来调用函数来解决此问题。

将功能定义更改为

 private static void GetXMLData()
 private static void InsertXMLData()
 private static void UpdateXMLData()

或使用类实例

 Program p = new Program();
 p.GetXMLData();

代码中无疑存在其他问题,但这应该可以帮助您入门。