C# 基于节点选择xml子体

C# 基于节点选择xml子体,c#,asp.net,.net,xml,linq,C#,Asp.net,.net,Xml,Linq,我有一个XML,我想根据日期选择一个元素。因此,Date后代的日期列表少于今天 XML有这样的值 <Dates> <Department> <ID>Food</ID> <Date>25-11-2016</Date> </Department> <Department> <ID>Sport</ID> <Date>26-10-2016</Date>

我有一个XML,我想根据日期选择一个元素。因此,Date后代的日期列表少于今天

XML有这样的值

<Dates>
<Department>
 <ID>Food</ID>
 <Date>25-11-2016</Date>
</Department>
<Department>
 <ID>Sport</ID>
 <Date>26-10-2016</Date>
</Department>
</Dates>

食物
25-11-2016
运动
26-10-2016
现在,我只需要选择相应日期小于今天的元素,下面的查询将选择日期并从xml中删除项目

XDocument newXML = XDocument.Load(new StringReader(xmlValues));
var q = from node in newXML.Descendants("Date")           
        let attr = node.Value where attr != null && DateTime.ParseExact
        (attr, "dd-MM-yyyy", CultureInfo.InvariantCulture) < DateTime.Today    
        select node.Parent;             
q.ToList().ForEach(x => x.Remove());
XDocument newXML=XDocument.Load(新的StringReader(xmlValues));
var q=newXML.substands(“日期”)中的from节点
设attr=node.Value,其中attr!=null&&DateTime.ParseExact
(attr,“dd-MM-yyyy”,CultureInfo.InvariantCulture)x.Remove());
现在,我如何才能只选择以下日期小于今天的项目

<Department>
 <ID>Sport</ID>
 <Date>26-10-2016</Date>
</Department>

运动
26-10-2016
试试这个

            string xml =
                "<Dates>" +
                    "<Department>" +
                     "<ID>Food</ID>" +
                     "<Date>25-11-2016</Date>" +
                    "</Department>" +
                    "<Department>" +
                     "<ID>Sport</ID>" +
                     "<Date>26-10-2016</Date>" +
                    "</Department>" +
                "</Dates>";

            XElement dates = XElement.Parse(xml);

            List<XElement> departs = dates.Descendants("Department").Where(x => DateTime.ParseExact(x.Element("Date").Value, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture) < DateTime.Now).ToList();
stringxml=
"" +
"" +
“食物”+
"25-11-2016" +
"" +
"" +
“运动”+
"26-10-2016" +
"" +
"";
XElement dates=XElement.Parse(xml);
List departies=dates.substands(“Department”).Where(x=>DateTime.ParseExact(x.Element(“Date”).Value,“dd-MM-yyyy”,System.Globalization.CultureInfo.InvariantCulture)
试试这个

            string xml =
                "<Dates>" +
                    "<Department>" +
                     "<ID>Food</ID>" +
                     "<Date>25-11-2016</Date>" +
                    "</Department>" +
                    "<Department>" +
                     "<ID>Sport</ID>" +
                     "<Date>26-10-2016</Date>" +
                    "</Department>" +
                "</Dates>";

            XElement dates = XElement.Parse(xml);

            List<XElement> departs = dates.Descendants("Department").Where(x => DateTime.ParseExact(x.Element("Date").Value, "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture) < DateTime.Now).ToList();
stringxml=
"" +
"" +
“食物”+
"25-11-2016" +
"" +
"" +
“运动”+
"26-10-2016" +
"" +
"";
XElement dates=XElement.Parse(xml);
List departies=dates.substands(“Department”).Where(x=>DateTime.ParseExact(x.Element(“Date”).Value,“dd-MM-yyyy”,System.Globalization.CultureInfo.InvariantCulture)
您的查询肯定已经这样做了(如果您将
ExpiryDate
修改为
Date
)?只是不要把它们移走。@CharlesMager-我的错,是打字错误。我试图在不删除的情况下查看它,但在
q.ToList()
中看不到它。作为删除的旁白,您只需执行
q.Remove()
。使用
XDocument.Parse
重载,而不是加载
StringReader
。您的查询肯定已经这样做了(如果您将
ExpiryDate
修改为
日期
)?只是不要把它们移走。@CharlesMager-我的错,是打字错误。我试图在不删除的情况下查看它,但在
q.ToList()
中看不到它。作为删除的旁白,您只需执行
q.Remove()
。并使用
XDocument.Parse
重载,而不是加载
StringReader
。如何检查此linq是否已识别项?结果是列表对象,您可以获取列表的计数或长度。如何检查此linq是否已识别项?结果是列表对象,您可以获取计数或者列表的长度。