我使用以下代码从xml文件中获取列表-
public static List<T> GetListFromXml<T>(string filePath)
{
using (TextReader reader = new StreamReader(filePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
return (List<T>) serializer.Deserialize(reader);
}
}然而,我也需要一种过滤记录的方法,我可以通过-
public static List<T> GetListFromXml<T>(string filePath,
int listCount,
string filterbyNode,
string filterByValue);如果我可以直接从XML文件中过滤,还是应该从返回的列表中筛选,请指导我?
附注:
上面提到的xml文件也是根据以下代码创建的-
public static void WriteListToXml<T>(List<T> list, string filePath)
{
using (TextWriter writer = new StreamWriter(filePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
serializer.Serialize(writer, list);
}
}为什么我要保存从数据库返回到xml文件的自定义集合-因为我希望一次只处理一批记录。
和XML文件片段(由上面的代码生成)-
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfClassifiedLocation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CLocation>
<CId>5726</CId>
<Long>0</Long>
<Lat>0</Lat>
<Postcode>ZZ1 5ZZ</Postcode>
<Street />
<Town />
</CLocation>
<CLocation>
<CId>5736</CId>
<Long>0</Long>
<Lat>0</Lat>
<Postcode>ZZ1 5ZZ</Postcode>
<Street />
<Town />
</CLocation>
</ArrayOfClassifiedLocation>发布于 2011-12-01 15:45:16
下面是一个LINQ查询示例,其中考虑了cid参数筛选器。如果在cidFilter中放置空字符串,查询将返回所有条目:
// you can use Parse() method:
// XDocument loaded = XDocument.Parse(xmlString);
XDocument loaded = XDocument.Load("c:\\temp\\testxl.xml");
// return only entry fith CID == 5726
string cidFilter = "5726";
var filteredItems =
loaded.Descendants("CLocation")
.Select((w, i) =>
new
{
Index = i,
CID = w.Descendants("CId").FirstOrDefault().Value,
PostCode = w.Descendants("Postcode").FirstOrDefault().Value
})
.Where(item => String.IsNullOrEmpty(cidFilter) || item.CID == cidFilter)
.ToList();
int itemsCount = filteredItems.Count();发布于 2011-12-01 13:00:56
如果您可以访问.net >= 3.5,则应考虑使用Linq到Xml
https://stackoverflow.com/questions/8341778
复制相似问题