如何从xml中读取满足或满足特定条件的数据

本文关键字:满足 特定条件 数据 读取 xml | 更新日期: 2023-09-27 18:26:49

如果我有这个数据模型类:

public class Person
{
    private int _id;
    private int _deptID;
    private string _firstName;
    private string _lastName;
    public int ID
    {
        get { return _deptID; }
        set { _deptID = value; }
    }
    public int DeptID
    {
        get { return _id; }
        set { _id = value; }
    }
    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }
    public string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

。。。然后创建我的数据集

    private List<Person> GeneratePersonData()
    {
        List<Person> personData = new List<Person>();
      personData.Add(new Person() { ID = 1, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 2, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 3, DeptID = 105, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 4, DeptID = 43, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 5, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 6, DeptID = 32, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 7, DeptID = 2, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 8, DeptID = 25, FirstName = "John", LastName = "Doe" });
        personData.Add(new Person() { ID = 9, DeptID = 2, FirstName = "John", LastName = "Doe" });
        return personData;
    }

然后我将数据存储到xml中,如下所示:

    private void StorePersonData()
    { 
    XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
        xmlWriterSettings.Indent = true;
        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Create))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
                using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
                {
                    serializer.Serialize(xmlWriter, GeneratePersonData());
                }
            }
        }
    }

现在,我想做的是将xml中具有特定deptID的人员读取到一个新列表中,所以我这样做:

    private void ReadPersonData(int deptID)
    {
        List<Person>data = new List<Person>();
        List<Person> newData = new List<Person>();
        using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
                 data = (List<Person>)serializer.Deserialize(stream);
            }
        }
        for (int i = 0; i < data.Count; i++)
        {
            if (data[i]._deptID == deptID)
            {
                newData.Add(data[i]);
            }
        }
    }
}

但是,如果我有一个非常大的数据集,这种方法的速度慢得离谱。xml中有没有一种方法可以只读取满足特定条件的数据?

如何从xml中读取满足或满足特定条件的数据

您可能需要重新考虑使用XML来存储数据。你的数据没有太多结构,你正在进行随机访问。看起来数据库在存储、索引和检索/过滤这些数据方面会做得更好;然后您可以根据需要将结果集导出为XML。

否-一旦您采用了将数据保存在XML中然后进行查询的方法,那么对于大型数据集来说,速度就必须很慢。

这是静态数据还是变化了?如果是静态数据,为什么不将xml保存在内存中呢?

注意1:为什么不在JSON对象中序列化,而不是XML呢。尺寸会小得多,因此你会看到一些改进。

注意2:当您使用不同的应用程序(比如一个内置于.net的应用程序和一个内置在java的应用程序)时,用JSON和XML保存数据是很好的。使用这些开放格式,您可以轻松地传递数据。我看到的是,是你在存储数据,还是你在读取数据?为什么选择XML(或JSON)??

更新

对于JSON序列化,可以使用http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

如果这个xml从未更改,那么就不要每次都读取它。读取并解析xml,将其保存在内存中,无论您喜欢什么方式(会话、静态变量、缓存)。

为什么不使用DB来存储相同的信息?一个应用程序可以将数据写入数据库,而另一个应用则从数据库中检索数据?