如何从嵌套属性中获取值?
How to get a value from nested attribute?
这是我的 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>
...
这段代码是我写的。但它不能正常工作。它无法获取指定的元素,我得到了一个 System. 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;
您应该考虑按顺序查询 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
这是我的 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>
...
这段代码是我写的。但它不能正常工作。它无法获取指定的元素,我得到了一个 System. 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;
您应该考虑按顺序查询 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