已知有一个本地的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!!!
有好多东西都忘了,学习就是不断的在忘记与拾起间游离。
一家之言,仅供参考!!!