这是我第一次使用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);
}
}
}
答案 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();
代码中无疑存在其他问题,但这应该可以帮助您入门。