已知有一個本地的xml文件(D:\location.xml)如下:
<?xml version="1.0" encoding="utf-8"?>
<GeocoderSearchResponse>
<status>0</status>
<result>
<location>
<lat>34.777046099314</lat>
<lng>113.67314082709</lng>
</location>
<precise>1</precise>
<confidence>80</confidence>
<level>商務大廈</level>
</result>
</GeocoderSearchResponse>
這是一個顯示地理位置的坐標信息,此xml文檔要求獲取<location>節點下的值,lat以及lng,就是經緯度。
好長時間沒有練習過xml,對xml也生疏了好多。上百度找了些xml知識,下面就這個例子講講我是怎麼一步一步實現獲取到的(包含):
首先,實例化xml,獲取xml文件的整體信息,這是必須的。下面這段代碼是我第一次寫的,沒有獲取到,貼出來給大家看看,也沒找原因。
//實例化xml
XmlDocument xml = new XmlDocument();
//讀取xml文件
xml.Load(@"D:\location.xml"); //你的xml地址
string lat = "";
string lng = "";
foreach (XmlNode node in xml.ChildNodes)
{
if (node.Name == "GeocoderSearchResponse")
{
foreach (XmlNode node1 in node.ChildNodes)
{
if (node1.Name == "result")
{
foreach(XmlNode node2 in node.ChildNodes)
{
if (node2.Name == "location")
{
foreach (XmlNode node3 in node2.ChildNodes)
{
switch (node3.Name)
{
case "lat":
lat = node2.InnerText;
break;
case "lng":
lng = node2.InnerText;
break;
}
}
}
}
}
}
}
}
這是我最笨的方法,一個一個的,循序漸進式的獲取節點,結果不如願,竟然做了吃力不討好的事情。所以說啊,干活那是得需要效率的,得使巧勁,不能蠻力。這個不建議大家浪費時間去琢磨。
有問題,那就得找出問題,解決問題。下面我又改進了前面的獲取方式,結果還是沒有獲取到,這時我郁了,感覺寫的也沒什麼錯啊,怎麼就獲取不到呢?、給大家瞅瞅
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(@"D:\location.xml");
XmlNode xnRoot = xmldoc.SelectSingleNode("GeocoderSearchResponse");
XmlNodeList nodelist = xnRoot.ChildNodes;
foreach (XmlNode node in nodelist)
{
string lat = node.SelectSingleNode("lat").InnerXml;
if (lat != "")
{
Console.WriteLine(lat);
}
}
工作,不是鑽牛角尖,不行,趕緊換,換思想,換思路,換解決方法,不能沉於一個問題而把自己的思路給凝固住了,所以當你卡殼的時候,這時的你需要放松一下了,要麼去接杯水喝,要麼出去透透氣或者干脆上趟WC,反正怎麼舒服怎麼來,呵呵。。。往往靈感就真這麼來了...
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(@"D:\location.xml");
XmlNodeList xnRoot = xmldoc.SelectNodes("/GeocoderSearchResponse/result/location");
//XmlNodeList nodelist = xnRoot.ChildNodes;
foreach (XmlNode node in xnRoot)
{
string lat = node.SelectSingleNode("lat").InnerText.ToString();
string lng = node.SelectSingleNode("lng").InnerText.ToString();
if (lat != "" && lng != "")
{
//在此就是你想要的值
Console.WriteLine(lat);
Console.WriteLine(lng);
}
}
Console.Read();
這段代碼就是我想要的結果,一切OK!!!
有好多東西都忘了,學習就是不斷的在忘記與拾起間游離。
一家之言,僅供參考!!!