无法弄清楚如何使用 LINQ 替换或添加 XML 元素

本文关键字:添加 XML 元素 替换 LINQ 弄清楚 何使用 | 更新日期: 2023-09-27 18:34:41

好的,所以我正在制作一个程序,您可以在其中选择当天的内容,并添加当天吃的东西并将其记录到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>

我需要做的是 1 找出日期是否存在,如果不制作一个新的"DAY"(我知道怎么做(,但如果它搜索 xml 文件并发现当前选择日期(使用日期选择器(已经记录了一个 DAY,以确定用户吃这种食物的时间并将其添加到该部分。

我们知道当用户通过组合框吃食物时,他们选择时间基本上我需要帮助是如何通过使用"DAY"的日期属性将其缩小到找到正确的"DAY",然后通过缩小搜索范围找到正确的时间在"DAY"内放置新的。

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

另外,如果有人知道执行上述操作的更好方法,那将非常感谢。

无法弄清楚如何使用 LINQ 替换或添加 XML 元素

var day = xmlDoc
          .Elements("day")
          .FirstOrDefault(d => d.Attribute("date").Equals(datePicker1.Text))

如果day为 null,则您没有记录日期。您继续:

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

如果您可以使用此库(https://github.com/ChuckSavage/XmlLib/(,则可以通过以下方式之一使用它。

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
}