在C#中,使用XML作为数据库可以通过以下步骤实现:
可以使用C#代码动态生成XML文件,也可以手动创建,创建一个名为data.xml
的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <Database> <Table name="Users"> <Row> <ID>1</ID> <Name>Tom</Name> <Age>25</Age> </Row> <Row> <ID>2</ID> <Name>Jerry</Name> <Age>23</Age> </Row> </Table> <Table name="Orders"> <Row> <OrderID>1001</OrderID> <UserID>1</UserID> <Amount>150</Amount> </Row> <Row> <OrderID>1002</OrderID> <UserID>2</UserID> <Amount>200</Amount> </Row> </Table> </Database>
1、加载XML文件:使用XmlDocument
类加载XML文件。
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml");
2、获取节点数据:通过XPath或遍历的方式获取节点数据,获取所有用户的信息:
XmlNodeList userNodes = xmlDoc.SelectNodes("/Database/Table[@name='Users']/Row"); foreach (XmlNode node in userNodes) { string id = node["ID"].InnerText; string name = node["Name"].InnerText; int age = int.Parse(node["Age"].InnerText); Console.WriteLine($"ID: {id}, Name: {name}, Age: {age}"); }
1、创建新节点:如果要添加新的用户信息,可以创建新的节点并添加到相应的位置。
XmlElement newUser = xmlDoc.CreateElement("Row"); newUser.SetAttribute("ID", "3"); newUser.SetAttribute("Name", "Mike"); newUser.SetAttribute("Age", "30"); XmlNode tableNode = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']"); tableNode.AppendChild(newUser);
2、更新节点:如果需要更新某个用户的信息,可以先找到对应的节点,然后修改其内容。
XmlNode userNode = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']/Row[@ID='2']"); userNode["Name"].InnerText = "Updated Jerry"; userNode["Age"].InnerText = "24";
3、保存XML文件:将修改后的XML文档保存回文件。
xmlDoc.Save("data.xml");
可以使用XPath进行复杂的查询,查询年龄大于20岁的用户:
XmlNodeList usersOver20 = xmlDoc.SelectNodes("/Database/Table[@name='Users']/Row[Age > 20]"); foreach (XmlNode node in usersOver20) { string id = node["ID"].InnerText; string name = node["Name"].InnerText; int age = int.Parse(node["Age"].InnerText); Console.WriteLine($"ID: {id}, Name: {name}, Age: {age}"); }
如果要删除某个用户的信息,可以先找到对应的节点,然后从其父节点中移除该节点。
XmlNode userToDelete = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']/Row[@ID='1']"); if (userToDelete != null) { userToDelete.ParentNode.RemoveChild(userToDelete); xmlDoc.Save("data.xml"); }
以下是一个完整的示例程序,展示了上述操作的综合应用:
using System; using System.Xml; class Program { static void Main() { // 加载XML文件 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); // 读取所有用户信息并输出 Console.WriteLine("All Users:"); XmlNodeList userNodes = xmlDoc.SelectNodes("/Database/Table[@name='Users']/Row"); foreach (XmlNode node in userNodes) { string id = node["ID"].InnerText; string name = node["Name"].InnerText; int age = int.Parse(node["Age"].InnerText); Console.WriteLine($"ID: {id}, Name: {name}, Age: {age}"); } // 添加新的用户信息 XmlElement newUser = xmlDoc.CreateElement("Row"); newUser.SetAttribute("ID", "3"); newUser.SetAttribute("Name", "Mike"); newUser.SetAttribute("Age", "30"); XmlNode tableNode = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']"); tableNode.AppendChild(newUser); // 更新用户信息 XmlNode userNode = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']/Row[@ID='2']"); userNode["Name"].InnerText = "Updated Jerry"; userNode["Age"].InnerText = "24"; // 删除用户信息 XmlNode userToDelete = xmlDoc.SelectSingleNode("/Database/Table[@name='Users']/Row[@ID='1']"); if (userToDelete != null) { userToDelete.ParentNode.RemoveChild(userToDelete); } // 保存修改后的XML文件 xmlDoc.Save("data.xml"); // 再次读取所有用户信息并输出,验证修改是否成功 Console.WriteLine(" Updated Users:"); userNodes = xmlDoc.SelectNodes("/Database/Table[@name='Users']/Row"); foreach (XmlNode node in userNodes) { string id = node["ID"].InnerText; string name = node["Name"].InnerText; int age = int.Parse(node["Age"].InnerText); Console.WriteLine($"ID: {id}, Name: {name}, Age: {age}"); } } }