假设我有以下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文件中的用户的日期,我将如何处理错误。 }
答案 0 :(得分:2)
您可以使用LINQ to XML,例如如何阅读 David 的上次日期
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();
}
更多信息:
答案 1 :(得分:2)
在XPath中,(/Users/User[Name = 'David'])[position() = last()]
但是,首先必须修复XML文件中的错误; - )
答案 2 :(得分:0)
我也会使用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 */
}