使用XML.Linq

时间:2017-02-01 16:14:10

标签: c# xml linq

我想选择具有最新时间戳的元素(存储为属性)并删除可能存在的任何其他元素(因为这意味着用户与xml文件混淆)。

(directory,name和fileName是包含此主体的方法的字段和/或参数)

        using ( FileStream fileStream = new FileStream( Path.Combine( directory, fileName ), FileMode.OpenOrCreate ) )
        {
            XElement xmlRoot = XElement.Load( fileStream );
            var query = from e in xmlRoot.Elements( "key" )
                where e.Attribute( "name" )?.Value == name
                orderby Int32.Parse(e.Attribute("timestamp")?.Value) descending select e;
            if(query.Count() == 1)
            {
                return query.First( );
            }
            else if (query.Count() > 1)
            {
                //here I need to delete any other than First (which has 
                //the latest timestamp, and return first, just like above)
            }
            else
            {

            }
        }

具体来说,我想知道如何在if (query.Count() > 1)子句中删除任何过时的元素(时间戳较小的元素)。 LINQ对我来说一直有点神秘。对不起,如果这个问题很简单。

PS:我鼓励任何知道此问题的具体计算名称的人编辑和重命名我的问题,并根据需要重新编写。我是业余爱好者。

1 个答案:

答案 0 :(得分:1)

您可以使用Remove扩展方法跳过查询结果中的第一个元素来执行此操作:

else if (query.Count() > 1)
 {
     var element=query.First();
     query.Skip(1).Remove();// do this to remove unwanted elements from your xml
     return element;       
 }