Как получить значение из вложенного атрибута? - PullRequest
0 голосов
/ 30 апреля 2020

Вот мой 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 ") Извините за мой Engli sh.

 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 Ответ

1 голос
/ 30 апреля 2020

Вы должны рассмотреть вопрос к XML report =>location => day ==> hour по порядку. Дайте этому go:

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

...