0

変数weekがオブジェクト配列[7]日で構成され、日がオブジェクト配列[9]時間で構成されるプログラムがあります。各時間オブジェクトには3つのデータメンバーがあります。特定の曜日と時間の各メンバーに、xmlファイルから特定の値を割り当てたいと思います。

   <parent> 
        <day>wednesday
            <hour>18.00 
                <value1>5</value1>
                <value2>10</value2>
                <value3>15</value3>
            </hour>
        </day>
        <day>thursday
            <hour>18.00 
                <value1>2</value1>
                <value2>3</value2>
                <value3>9</value3>
            </hour> 
        </day>
   </parent>

        day[wedensday].hour[18.00].member1 = xml.day[wednesday].hour[18.00].value1
        day[wedensday].hour[18.00].member1 = xml.day[wednesday].hour[18.00].value2
        day[wedensday].hour[18.00].member1 = xml.day[wednesday].hour[18.00].value3

私はxmlの操作に不慣れで、次の擬似コードを考え出しましたが、それを実装するのは困難です。

    member[i] = value[i] where day[i].name == xml.day && day[i].hour[i] == xml.hour

誰かが私を案内したり、この問題に役立つリソースに私を導いたりすることができれば、それは大いにありがたいです、ありがとう:)

4

1 に答える 1

1

Linqtoxmlを使用してxmlを解析できます。

XDocument xdoc = XDocument.Load(path_to_xml_file);
var week = new
{
    Days = xdoc.Descendants("day")
                .Select(day => new {
                    Name = ((XText)day.FirstNode).Value.Trim(),
                    Hours = day.Descendants("hour")
                                .Select(hour => new {
                                    Time = ((XText)hour.FirstNode).Value.Trim(),
                                    Values = hour.Elements()
                                                .Select(node => (int)node)
                                                .ToList()
                                }).ToList()
                }).ToList()
};

週は強く型付けされた匿名オブジェクトになります。使用法:

var daysCount = week.Days.Count; // 2 
var secondDayName = week.Days[1].Name; // thursday
var hoursInSecondDay = week.Days[1].Hours.Count; // 1
var timeOfFirstHour = week.Days[1].Hours[0].Time; // 18:00
var value3 = week.Days[1].Hours[0].Values[2]; // 9

説明:

xdoc.Descendants("day")<day>すべてのノードを返します。ただし、xmlノードは必要ないため、日を表す匿名オブジェクトを選択して投影を行います。このオブジェクトには、との2つのプロパティがNameありHoursます。要素の最初のノードから取得した名前<day>、つまりテキストノード(最初の日の「水曜日」)。<hour>の要素を選択し、時間を<day>表す匿名オブジェクトに投影することで得られる時間。等。


日の名前と時間の値を次のような属性に移動する場合:

<parent>
  <day name="wednesday">  
    <hour time="18.00">    
      <value1>5</value1>
      <value2>10</value2>
      <value3>15</value3>
    </hour>
  </day>
</parent>

次に、解析は次のようになります。

XDocument xdoc = XDocument.Load(path_to_xml_file);
var week = new
{
    Days = xdoc.Descendants("day")
                .Select(day => new {
                    Name = (string)day.Attribute("name"),
                    Hours = day.Descendants("hour")
                                .Select(hour => new {
                                    Time = (string)hour.Attribute("time"),
                                    Values = hour.Elements()
                                                .Select(node => (int)node)
                                                .ToList()
                                }).ToList()
                }).ToList()
};
于 2012-11-29T00:29:53.243 に答える