我想读取xml中的所有节点。在没有循环的情况下读取顶部节点很好,但我想读取所有节点以获得每个城市的所有不同温度。这是 xml:
<servers>
<server name ="Stockholm">
<!-- data from Google weather -->
<name>Stockholm (Google)</name><!--Läser denna rad för tillfället-->
<url>http://www.yr.no/place/sweden/stockholm/stockholm/forecast.xml</url>
<xpath>/weatherdata/forecast/tabular/time/temperature</xpath>
</server>
<server name ="Göteborg">
<name>Göteborg (Google)</name> <url>http://www.yr.no/place/Sweden/V%C3%A4stra_G%C3%B6taland/Gothenburg/forecast.xml</url>
<xpath>/weatherdata/forecast/tabular/time/temperature</xpath>
</server>
<server name =" Malmö">
<name>Malmö (Google)</name>
<url>http://www.yr.no/place/sweden/scania/malmö/forecast.xml</url>
<xpath>/weatherdata/forecast/tabular/time/temperature</xpath>
</server>
</servers>
到目前为止我的代码:
XmlDocument serverDoc = new XmlDocument();
serverDoc.Load("ServerUrls.xml");
XmlNodeList xml =
serverDoc.SelectNodes("servers/server");
foreach (var node in xml)
{
}
我知道的不多。但似乎无法找到我可以正确使用的信息。去过 MSDN 并试图从那里找出答案,但没有结果。
感谢我能得到的所有帮助。
最佳答案
如评论中所述,您需要获取实际温度所在的 XML 的 URL,以及相应的 XPath 以在 XML 中定位温度。将 URL 中的 XML 加载到 XmlDocument
中,然后执行 XPath 以提取实际温度值:
foreach (XmlNode node in xml)
{
// get information needed to extract temprature i.e XML location, and the XPath :
var loc = node.SelectSingleNode("url").InnerText;
var xpath = node.SelectSingleNode("xpath").InnerText;
// get temperature information
var doc = new XmlDocument();
doc.Load(loc);
var temperatures = doc.SelectNodes(xpath);
// iterate through temperatures and take action accordingly, f.e print the temperature
foreach(XmlNode temperature in temperatures)
{
Console.WriteLine(temperature.Attributes["value"].Value);
}
}
关于c# - foreach循环读取xml子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43384458/