【问题标题】:Getting last element of an xml file获取xml文件的最后一个元素
【发布时间】:2012-10-01 06:24:12
【问题描述】:

假设我有以下 xml 文件

<Users>
 <User>
  <Name>David</Name>
  <Date>9/30/2012 10:52:00 PM</Date>
 </User>
 <User>
  <Name>David</Name>
  <Date>9/30/2012 11:02:05 PM</Date>
 </User>
 <User>
  <Name>David</Name>
  <Date>9/30/2012 11:52:00 PM</Date>
 </User>
 <User>
 <Name>Michelle</Name>
 <Date>9/30/2012 11:02:13 PM</Date>
 </User>
 <User>
  <Name>Michelle</Name>
  <Date>9/30/2012 11:02:54 PM</Date>
 </User>
</Users>

我想读取 David 的最后日期并将其放在我的 C# 程序中的一个字符串上,在这种情况下它将是“9/30/2012 11:52:00 PM”我有以下代码假设读取特定用户的日期,但它不起作用

       public void readLastDate(string name)
        {      
        string filePaths = "logins.xml";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(filePaths);

        xmlDoc.DocumentElement.SetAttribute("searching",name);
        XmlNodeList tests = xmlDoc.SelectNodes("//Users[Name =/*/@searching]/User");
        foreach (XmlNode test in tests)
        {
            string myDate = test.SelectSingleNode("LoginDate").InnerText;
            InfoBox.Items.Add("Last  Date:" + myDate);

        }   

另外,如果我想读取不在 xml 文件中的用户的日期,我将如何处理错误。 }

【问题讨论】:

  • 你绑定到 XmlDocument 了吗? LINQ to XML 让这一切变得更加简单——我个人不是 XPath 的粉丝,尽管如果你对它感到满意,那么切换到 LINQ to XML 的理由就更少了……
  • 我对 linq to xml 不太熟悉,我将如何在 linq to xml 中完成所有这些操作?

标签: c# xml linq xmldocument


【解决方案1】:

您可以使用 LINQ to XML,例如如何读取 David

last date
var xDoc = XDocument.Load("logins.xml");

var userElements = xDoc.Descendants("User")
    .Where(x => x.Element("Name").Value == "David")
    .ToList();

if (userElements.Any())
{
    string lastDate = userElements.Select(x => 
                                       DateTime.Parse(x.Element("Date").Value))
        .OrderByDescending(x => x)
        .First()
        .ToString();
}

更多信息:

http://msdn.microsoft.com/en-us/library/bb387098.aspx

【讨论】:

  • 谢谢,如果搜索不在 xml 文件中的用户,我将如何处理错误?
  • 我收到此错误:错误 2 不可调用的成员 'System.Nullable.HasValue' 不能像方法一样使用
【解决方案2】:

在 XPath 中,(/Users/User[Name = 'David'])[position() = last()]

但是,首先您必须修复 XML 文件中的错误;-)

【讨论】:

    【解决方案3】:

    我也会使用 Linq-to-XML。我认为我的方法很干净。

    var result =
        XDocument
            .Load(fileName)
            .Element("Users")
            .Elements("User")
            .Where(xe => xe.Element("Name").Value == "David")
            .Select(xe => DateTime.Parse(xe.Element("Date").Value))
            .OrderByDescending(d => d)
            .FirstOrDefault();
    
    if (result == default(DateTime))
    {
        /* no value */
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多