根据节点选择XML后代

本文关键字:XML 后代 选择 节点 | 更新日期: 2023-09-27 18:15:33

我有一个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>

现在我只需要挑选日期小于今天的元素,下面的查询将挑选日期并从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());

现在我如何选择以下日期小于今天的项目?

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

根据节点选择XML后代

试试这个

            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();