Ram*_*Ram 0 c# xml asp.net exception
我想从API(即wunderground API)的XML响应中读取数据以进行天气预报。我已经使用下面的代码来阅读它。
HttpWebRequest GoogleRequest;
HttpWebResponse GoogleResponse = null;
XmlDocument GoogleXMLdoc = null;
try
{
GoogleRequest = (HttpWebRequest)WebRequest.Create("http://api.wunderground.com/api/c94ec600fe494bc2/astronomy/q/Cayman/Grand.xml");
GoogleResponse = (HttpWebResponse)GoogleRequest.GetResponse();
GoogleXMLdoc = new XmlDocument();
GoogleXMLdoc.Load(GoogleResponse.GetResponseStream());
XmlNode root = GoogleXMLdoc.DocumentElement;
//XmlNodeList nodeList1 = root.SelectNodes("/sunset/");
XmlNode test = root.SelectSingleNode("/moon_phase/");
}
//.....
Run Code Online (Sandbox Code Playgroud)
但是我是异常表达式,必须 在代码的最后一行求值到节点集。我尝试了一些解决方案,但无法获取数据。实际上,想要的是:我想确定太阳落山和日出的时间。请帮助我如何解决此问题。
小智 5
当您想通过xpath获取xml时,应获得如下代码:
XmlNode test = root.SelectSingleNode("//moon_phase/percentIlluminated");
Run Code Online (Sandbox Code Playgroud)
要么
XmlNode test = root.SelectSingleNode("//moon_phase/*");
Run Code Online (Sandbox Code Playgroud)
要么
GoogleXMLdoc.SelectSingleNode("//moon_phase[0]");
Run Code Online (Sandbox Code Playgroud)
这是您的结果:
<version>0.1</version><termsofService>http://www.wunderground.com/weather/api/d/terms.html</termsofService>
<features><feature>astronomy</feature></features>
<moon_phase><percentIlluminated>91</percentIlluminated><ageOfMoon>12</ageOfMoon><current_time><hour>1</hour><minute>51</minute></current_time><sunset><hour>17</hour><minute>50</minute></sunset><sunrise><hour>6</hour><minute>51</minute></sunrise></moon_phase><sun_phase><sunset><hour>17</hour><minute>50</minute></sunset><sunrise><hour>6</hour><minute>51</minute></sunrise></sun_phase>
Run Code Online (Sandbox Code Playgroud)
看到这个网站:
<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<actors>
<actor id="1">Christian Bale</actor>
<actor id="2">Liam Neeson</actor>
<actor id="3">Michael Caine</actor>
</actors>
<foo:singers>
<foo:singer id="4">Tom Waits</foo:singer>
<foo:singer id="5">B.B. King</foo:singer>
<foo:singer id="6">Ray Charles</foo:singer>
</foo:singers>
</root>
Run Code Online (Sandbox Code Playgroud)
选择文档节点
/
选择“根”元素
/根
选择作为“演员”元素直接子代的所有“演员”元素。
/ root / actor / actor
选择所有“歌手”元素,无论它们在文档中的位置如何。
// foo:歌手
选择“歌手”元素的“ id”属性,无论它们在文档中的位置如何。
// foo:歌手/ @ id
选择第一个“ actor”元素的文本值。
//演员1 / text()
选择最后一个“ actor”元素。
// actor [last()]
使用它们的位置选择第一个和第二个“ actor”元素。
// actor [position()<3]
选择所有具有“ id”属性的“演员”元素。
//演员[@id]
选择“ id”属性值为“ 3”的“ actor”元素。
// actor [@ id ='3']
选择“ id”属性值小于或等于“ 3”的所有“ actor”节点。
//演员[@id <= 3]
选择“歌手”节点的所有子级。
/ root / foo:歌手/ *
选择文档中的所有元素。
// *
选择所有“演员”元素和“歌手”元素。
//演员| /// foo:歌手
选择文档中第一个元素的名称。
名称(// * 1)
选择第一个“ actor”元素的“ id”属性的数值。编号(//演员1 / @ id)
选择第一个“ actor”元素的“ id”属性的字符串表示值。
字符串(//演员1 / @ id)
选择第一个“ actor”元素的文本值的长度。
字符串长度(// actor 1 / text())
选择第一个“歌手”元素的本地名称,即没有名称空间。
本地名称(// foo:singer 1)
选择“歌手”元素的数量。
count(// foo:singer)选择'singer'元素的'id'属性之和。
sum(// foo:歌手/ @ id)
归档时间: |
|
查看次数: |
4472 次 |
最近记录: |