如何从嵌套属性获取值?

时间:2020-04-30 14:00:19

标签: c# xml xml-parsing linq-to-xml

这是我的xml文档。我需要获得一个小时要素的价值。

 `<report>
    <location city="">
     <interesting>
      <url description="прогноз">
     </interesting>
     <day value="20200430" name="четверг">
       <symbol value="11" desc="Переменная облачность с грозовыми ливнями" 
       value2="11" desc2="Переменная облачность с грозовыми ливнями"/>
       <tempmin value="11" unit="°C"/>
       <tempmax value="22" unit="°C"/>
       <wind value="19" unit="km/h" symbol="13" symbolB="45"/>
       <wind-gusts value="38" unit="km/h"/>
       <rain value="3" unit="mm"/>
       <humidity value="69"/>
       <pressure value="1006" unit="mb"/>
       <snowline value="2500" unit="m"/>
       <uv_index_max value="5"/>
       <sun in="05:34" mid="12:54" out="20:15"/>
       <moon in="10:52" out="02:29" lumi="44.82%" desc="Прибывающая, 44.82% 
         Освещенность" symbol="7"/>
         <local_info local_time="10:11" offset="3"/>
       <hour value="02:00">
       <temp value="14" unit="°C"/>
       <symbol value="2" desc="Переменная облачность" value2="2" 
        desc2="Переменная облачность"/>
       <wind value="18" unit="km/h" dir="SW" symbol="14" symbolB="46"/>
       <wind-gusts value="35" unit="km/h"/>
       <rain value="0" unit="mm"/>
       <humidity value="57"/>
       <pressure value="1005" unit="mb"/>
       <clouds value="41%"/>
       <snowline value="2500" unit="m"/>
       <windchill value="14" unit="°C"/>
       <uv_index value="0"/>
       </hour>
       <hour value="05:00">
      **<temp value="12"** unit="°C"/> 
        <symbol value="2" desc="Переменная облачность" value2="2" 
          desc2="Переменная облачность"/>
        <wind value="15" unit="km/h" dir="SW" symbol="14" symbolB="46"/>
        <wind-gusts value="32" unit="km/h"/>
        <rain value="0" unit="mm"/>
        <humidity value="69"/>
        <pressure value="1006" unit="mb"/>
        <clouds value="27%"/>
        <snowline value="2600" unit="m"/>
        <windchill value="12" unit="°C"/>
        <uv_index value="0"/>
       </hour>
<hour value="08:00">...</hour>
...

我写了这段代码。但是它不能正常工作。它无法获得指定的元素,而我得到了一个系统。一直 InvalidOperationException 。如果我想从任何小时元素中获取任何值,如何为下面的代码获取正确的路径?(例如,此“ temp value =“ 14”)抱歉英语。

 var mycur = doc.Descendants("day").Where(x => x.Element("hour").Attribute("value").Value=="16:00").Elements("temp").First();


 var cur = mycur.Element("temp").Attribute("value").Value;

1 个答案:

答案 0 :(得分:1)

您应该考虑按顺序查询XML report =>location => day ==> hour。试试看:

var mycur = doc.Descendants("report")
                .Descendants("location")
                .Descendants("day")
                .Descendants("hour").FirstOrDefault(x => x.Attribute("value").Value == "05:00");

var cur = mycur.Element("temp").Attribute("value").Value;

在这种情况下,它将在14小时内给出预期的结果:02:00