仅获取具有Specific值的XML节点

时间:2014-12-01 22:05:01

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

我正在做一个运行良好但我遇到问题的天气应用程序。 XMl似乎是:

<city>
  <city_code>DE0011259</city_code>
  <name>Wegberg</name>
  <url>deutschland/wegberg/DE0011259.html</url>
  <post_code>41844</post_code>
  <forecast>
    <date value="2014-12-01">
      <w>2</w>
      <tx>4</tx>
      <pc>30</pc>
      <time value="06:00">
        <w>2</w>
        <tx>3</tx>
        <pc>30</pc>
        <tn>2</tn>
        <ws>11</ws>
        <w_txt>wolkig</w_txt>
      </time>
      <time value="11:00">
        <w>2</w>
        <tx>4</tx>
        <pc>20</pc>
        <tn>3</tn>
        <ws>12</ws>
        <w_txt>wolkig</w_txt>
      </time>
      <time value="17:00">
        <w>2</w>
        <tx>4</tx>
        <pc>20</pc>
        <tn>1</tn>
        <ws>9</ws>
        <w_txt>wolkig</w_txt>
      </time>
      <time value="23:00">
        <w>2</w>
        <tx>1</tx>
        <pc>30</pc>
        <tn>1</tn>
        <ws>7</ws>
        <w_txt>wolkig</w_txt>
      </time>
      <tn>1</tn>
      <ws>10</ws>
      <w_txt>wolkig</w_txt>
    </date>
  </forecast>
</city>

对不起,如果我的英语太差了^^ 问题是我如何从其他时间获取数据 我的问题是我只从6:00开始获取数据而不知道如何从17:00或23:00获取数据

获取天气的代码:

string xml;
using (var webClient = new WebClient())
{
    xml = webClient.DownloadString(URL);
}
XDocument doc = XDocument.Parse(xml);

string wind = doc.XPathSelectElement("/city/forecast/date/time/ws").Value + " km/h";

2 个答案:

答案 0 :(得分:0)

如果你想要做的是在特定时间对XML 执行查询,那么使用Linq To XML很容易得到你想要的东西:

XDocument doc = XDocument.Load(@"somePath\SO.xml");

// E.g. get ws value for time = "17:00"    
XElement specificElement = doc.Descendants("time")
                              .Where(t => t.Attribute("value").Value == "17:00")
                              .FirstOrDefault();
if (specificElement != null)
{
   string wind = specificElement.Element("ws").Value + " km/h";
}

答案 1 :(得分:0)

  

我的问题是我只从6:00开始获取数据而不知道如何从17:00或23:00获取数据

好像你应该在你的xpath中有一个条件,例如,

string wind = doc.XPathSelectElement("/city/forecast/date/time[@value='17:00']/ws")
                 .Value + " km/h";

(参见 [@value='17:00']

如果您想获取所有值,则可以使用XPathSelectElement**s**,如评论中所述。