好的,所以我正在制作一个程序,你选择当天,并添加你当天吃的东西,并将其记录到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;
}
此外,如果有人知道更好的方法,那么非常感谢你。
答案 0 :(得分:1)
var day = xmlDoc
.Elements("day")
.FirstOrDefault(d => d.Attribute("date").Equals(datePicker1.Text))
如果day
为空,那么您就不会记录当天。你继续:
if (day != null)
day.Element(chosenMomentOfTheDay).Add(XElementOfTheFoodToBeAdded);
答案 1 :(得分:0)
如果您可以使用此库(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
}