首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XML获取过滤的List<T>

从XML获取过滤的List<T>
EN

Stack Overflow用户
提问于 2011-12-01 12:58:39
回答 2查看 215关注 0票数 1

我使用以下代码从xml文件中获取列表-

代码语言:javascript
复制
    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);
        }
    }

然而,我也需要一种过滤记录的方法,我可以通过-

  • 不是的。要从xml文件获取的记录。
  • 按特定节点值进行筛选 因此,上述方法的签名将改为-
代码语言:javascript
复制
    public static List<T> GetListFromXml<T>(string filePath, 
                                            int listCount, 
                                            string filterbyNode, 
                                            string filterByValue);

如果我可以直接从XML文件中过滤,还是应该从返回的列表中筛选,请指导我?

附注:

上面提到的xml文件也是根据以下代码创建的-

代码语言:javascript
复制
    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文件片段(由上面的代码生成)-

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-01 15:45:16

下面是一个LINQ查询示例,其中考虑了cid参数筛选器。如果在cidFilter中放置空字符串,查询将返回所有条目:

代码语言:javascript
复制
// 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();
票数 1
EN

Stack Overflow用户

发布于 2011-12-01 13:00:56

如果您可以访问.net >= 3.5,则应考虑使用Linq到Xml

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8341778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档