当 XML 可以不同时,选择具有特定子节点的节点

本文关键字:子节点 节点 选择 XML | 更新日期: 2023-09-27 18:32:00

我有有效的代码,但我想看看是否有比我所拥有的更好更好的解决方案(我确定有!我有一个网络服务,需要返回具有一个名为"updateDate"的子节点的所有节点,其日期比传入日期更新。对于每个查询,我返回的 xml 可能不同,它们唯一的共同点是 updateDate 节点。我目前正在将 linq to xml 与 xpath 一起使用,这是代码:

XDocument allNodes = XDocument.Parse(result);
IEnumerable<XElement> nodesWithDates = allNodes.XPathSelectElements("//updatedDate");
XElement updatedNodes = new XElement("UpdatedNodes");
foreach (XElement node in nodesWithDates)
{
    DateTime date;
    if (DateTime.TryParse(node.Value, out date))
    {
        if (date > dateToCompare)
        {
            updatedNodes.Add(node.Parent);
        }
    }
}
return updatedNodes;

关于如何改进它的任何想法?

谢谢

安妮莉

当 XML 可以不同时,选择具有特定子节点的节点

一种稍微不同且更紧凑的方法:

DateTime date;
var nodes = allNodes.Descendants("updatedDate")
                    .Where(x => DateTime.TryParse(x.Value, out date)
                                && date > dateToCompare)
                    .Select(x => x.Parent);
XElement updatedNodes = new XElement("UpdatedNodes", nodes);