C# 无法确定如何使用LINQ替换或添加XML元素

C# 无法确定如何使用LINQ替换或添加XML元素,c#,wpf,xml,linq,C#,Wpf,Xml,Linq,好的,我正在制作一个程序,你选择当天,添加当天吃的东西,并将其记录到一个xml文件中。 你可以选择什么时候吃,比如早餐、运动后等。 现在,我的xml如下所示: <?xml version="1.0" encoding="utf-8" ?> <Log> <DAY date="11/8/1995" id ="1"> <Breakfast> <food size="1">mys</food> <

好的,我正在制作一个程序,你选择当天,添加当天吃的东西,并将其记录到一个xml文件中。 你可以选择什么时候吃,比如早餐、运动后等。 现在,我的xml如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<Log>
  <DAY date="11/8/1995" id ="1">
    <Breakfast>
      <food size="1">mys</food>
    </Breakfast>
    <MidAfternoon>
      <food size="2">mys</food>
    </MidAfternoon>
    <Lunch>
      <food size="0.5">mys</food>
    </Lunch>
    <PostWorkout>
      <food size="10">mys</food>
    </PostWorkout>
    <BeforeBed>
      <food size="20">mys</food>
    </BeforeBed>
  </DAY>
  <DAY date="5/20/12" id="2">
    <Breakfast>
      <food size="1">mys</food>
    </Breakfast>
    <MidAfternoon>
      <food size="2">mys</food>
    </MidAfternoon>
    <Lunch>
      <food size="0.5">mys</food>
    </Lunch>
    <PostWorkout>
      <food size="10">mys</food>
    </PostWorkout>
    <BeforeBed>
      <food size="20">mys</food>
    </BeforeBed>
 </DAY>
我需要做的是找出日期是否存在,如果没有,我知道如何创建新的一天,但是如果它搜索xml文件,并发现使用日期选择器选择的当前日期已经记录了一天,以确定用户吃这些食物的时间,并将其添加到该部分

我们知道,当用户通过一个组合框来选择时间时,我需要的基本帮助是如何通过使用当天的日期属性来缩小范围,找到正确的日期,然后缩小搜索范围,在一天中找到正确的时间来放置新的日期

<food size="numberhere">foodname</food>
请帮助我,到目前为止,我所得到的是:

            var NOD = from dates in xmlDoc.Descendants("DAY")
                  select dates;
        int i = 0;
        foreach (XElement d in NOD)
        {

            dlist[i] = d;
            i++;
        }

        for (int j = 0; j < i; j++ )
        {

            if (dlist[j].Attribute("date").Value == datePicker1.Text)
            {
                Console.WriteLine("this date already has a record");
                bRecorded = true;
                break; 
            }
            bRecorded = false;

        }
此外,如果有人知道一个更好的方式做上述这将是伟大的,非常感谢你

var day = xmlDoc
          .Elements("day")
          .FirstOrDefault(d => d.Attribute("date").Equals(datePicker1.Text))
如果day为null,则不记录日期。您可以通过以下方式继续:

if (day != null)
    day.Element(chosenMomentOfTheDay).Add(XElementOfTheFoodToBeAdded);

如果可以使用此库,则可以通过以下方式之一使用它

XElement root = XElement.Load(file);
//XElement day = root.XPathElement("DAY[@date={0}]", DateTime.Now.ToString("M/d/yy"));
XElement day = root.XPathElement("DAY[@date={0}]", DateTime.Now.Date));// or by specific new DateTime(2012, 5, 21));
如果返回null,则该天还不存在

if(null == day)
{
    // day not found
}
else
{
    // day found
}

请考虑使用适当的格式化、标点符号和大写。