当前位置:首页 > 行业动态 > 正文

如何在C中使用XML作为数据库?

C#使用XML作为数据库通常涉及将数据存储在XML文件中,并通过C#代码进行读取、写入和操作。这种方法适用于小型应用程序或需要简单 数据存储的场景。

在C#中,使用XML作为数据库可以通过以下步骤实现:

创建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>

读取XML数据

1、加载XML文件:使用XmlDocument类加载XML文件。

如何在C中使用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}");
}

写入XML数据

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、更新节点:如果需要更新某个用户的信息,可以先找到对应的节点,然后修改其内容。

如何在C中使用XML作为数据库?

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");

查询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}");
}

删除XML数据

如果要删除某个用户的信息,可以先找到对应的节点,然后从其父节点中移除该节点。

如何在C中使用XML作为数据库?

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}");
        }
    }
}