【问题标题】:How to get a value from nested attribute?如何从嵌套属性中获取值?
【发布时间】:2020-08-14 22:04:53
【问题描述】:

这是我的 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;

【问题讨论】:

  • 有什么异常?类型和信息都很重要。而且堆栈跟踪永远不会受到伤害。
  • 系统。无效操作异常

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


【解决方案1】:

您应该考虑按顺序查询 XML report =&gt;location =&gt; day ==&gt; 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 for hour 02:00

【讨论】:

  • @Sajid 不错!我已经更新了我的答案,感谢您的贡献。
  • @SelimYıldız 就是这样,你错过了小时的后代 :) +1,你也可以删除Descendants("report").Descendants("location")
猜你喜欢
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多