簡體   English   中英

為對象數組的每個成員分配xml文件中的值

[英]Assigning each member of an object array with values from an xml file

我有一個程序,其中變量week由對象array [7] days組成,而days由對象array [9] hours組成。 每個小時對象有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

如果有人可以指導我或將我定向到可以幫助解決此問題的資源,將不勝感激,謝謝:)

您可以使用Linq將xml解析為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節點,因此我們通過選擇表示天的匿名對象來進行投影。 該對象具有兩個屬性NameHours 我們從<day>元素的第一個節點獲得的名稱,即文本節點(第一天為“星期三”)。 通過選擇<hour> <day> <hour>元素並投影到表示小時的匿名對象來獲得小時。 等等。


如果將日期名稱和小時值移動到這樣的屬性中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM