如何从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保存在内存中呢?
注意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来存储相同的信息?一个应用程序可以将数据写入数据库,而另一个应用则从数据库中检索数据?