2

次の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/201211:52:00PM」になります。次のコードを読むことになっています。特定のユーザーの日付ですが、機能していません

       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ファイルにないユーザーの日付を読み取りたい場合、エラーをどのように処理しますか?}

4

3 に答える 3

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

詳しくは:

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

于 2012-10-01T06:35:12.460 に答える
2

XPathでは、(/Users/User[Name = 'David'])[position() = last()]

ただし、最初にXMLファイルのエラーを修正する必要があります;-)

于 2012-10-01T07:30:26.027 に答える
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 */
}
于 2012-10-01T08:00:56.827 に答える