zoukankan      html  css  js  c++  java
  • 读取XML文件内的某个节点的值

    已知有一个本地的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!!!

    有好多东西都忘了,学习就是不断的在忘记与拾起间游离。

    一家之言,仅供参考!!!

  • 相关阅读:
    如何在Ubuntu18.04(Bionic Beaver)系统安装Teamviewer远程控制软件
    glVertexAttribPointer 用法简介
    OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out
    C++多线程中用临界区控制全局变量的访问冲突问题
    fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。
    WaitForSingleObject的详细用法
    [转]Win7 + Ubuntu 18.04 LTS (Bionic Beaver)双系统安装方法
    [Android Pro] Android打包一个Apk后,如何查看它的VersionCode、VersionName 等等。
    [Android] 查看Android中的AlarmManager事件
    [Android Pro] proguard
  • 原文地址:https://www.cnblogs.com/litao4047/p/3108544.html
Copyright © 2011-2022 走看看