c#从XML中提取数据
本文关键字:提取 数据 XML | 更新日期: 2023-09-27 18:13:00
我正在尝试从URL中的XML读取天气数据。XML看起来像这样:
<weatherdata>
<location>...</location>
<credit>...</credit>
<links>...</links>
<meta>...</meta>
<sun rise="2013-05-11T04:49:22" set="2013-05-11T21:39:03"/>
<forecast>
<text>...</text>
<tabular>
<time from="2013-05-11T01:00:00" to="2013-05-11T06:00:00" period="0">
<!--
Valid from 2013-05-11T01:00:00 to 2013-05-11T06:00:00
-->
<symbol number="2" name="Fair" var="mf/02n.03"/>
<precipitation value="0" minvalue="0" maxvalue="0.1"/>
<!-- Valid at 2013-05-11T01:00:00 -->
<windDirection deg="173.8" code="S" name="South"/>
<windSpeed mps="4.2" name="Gentle breeze"/>
<temperature unit="celsius" value="9"/>
<pressure unit="hPa" value="1004.2"/>
</time>
</tabular>
</forecast>
<observations>...</observations>
</weatherdata>
我对XML中的预测数据感兴趣。我想要得到时间从和时间到,然后是天气数据。例如,在XML中温度是这样写的:
<temperature unit="celsius" value="9"/>
我想用这样的方式提取数据:
string fromTime = time from(the attribute in the xml);
string fromTime =time to(the attribute in the xml);
string name = temperature(the attribute in the xml);
string unit =unit(the attribute in the xml);
int value = value(the attribute in the xml);
我创建了能够读取一切的示例代码,但我不知道如何提取我需要的数据。我现在的代码看起来像这样:
String URLString = "http://www.yr.no/place/Norway/Oslo/Oslo/Oslo/forecast.xml";
XmlTextReader reader = new XmlTextReader(URLString);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an element.
Console.Write("" + reader.Name);
while (reader.MoveToNextAttribute()) // Read the attributes.
Console.Write(" " + reader.Name + "='" + reader.Value + "'");
Console.Write("'n");
Console.WriteLine("------------------------------");
break;
case XmlNodeType.Text: //Display the text in each element.
Console.WriteLine(reader.Value);
break;
case XmlNodeType.EndElement: //Display the end of the element.
Console.Write("</" + reader.Name);
Console.WriteLine(">");
break;
}
}
有什么想法我可以提取天气数据和时间吗?
使用LINQ to XML
XDocument X = XDocument.Load("http://www.yr.no/place/Norway/Oslo/Oslo/Oslo/forecast.xml");
var forecast = X.Element("weatherdata").Element("forecast");
var location = forecast.Descendants("location").Attributes("name").FirstOrDefault().Value;
var tempData = forecast.Element("tabular").Elements("time");
//This is what you need
var data = tempData.Select(item=>
new{
from = Convert.ToDateTime(item.Attribute("from").Value),
to = Convert.ToDateTime(item.Attribute("to").Value),
temp = item.Element("temperature").Attribute("value").Value
});
//Or you can do a foreach if you need to
foreach (var item in tempData)
{
DateTime from = Convert.ToDateTime(item.Attribute("from").Value);
var temp = item.Element("temperature").Attribute("value").Value;
}
我还没有填充所有的东西。我希望你能了解如何使用它
使用System.Xml.Linq
中的XElement
XElement all = XElement.Load(reader);
var values = all.Decentents("forecast").Select(fc => {
XElement time = fc.Element("time");
XElement temp = fc.Element("temperature");
return new Tuple<string, string, string, string>(
time.Attribute("from").Value,
time.Attribute("to").Value,
temperature.Attribute("unit").Value,
temperature.Attribute("value").Value);});
这可以帮助您访问所需的特定节点值。希望能有所帮助!
从XML文档中获取指定的Node值