0

わかりましたので、現在の日を選択し、その日に食べたものを追加して、それを 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;

        }

また、誰かが上記を行うためのより良い方法を知っていれば、それは素晴らしいことです。

4

2 に答える 2

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

が null の場合day、その日は記録されていません。次の方法で続行します。

if (day != null)
    day.Element(chosenMomentOfTheDay).Add(XElementOfTheFoodToBeAdded);
于 2012-05-21T13:08:22.387 に答える
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
}
于 2012-05-21T14:27:38.333 に答える