《移动端签到》——用XML灵活配置变量

公司的考勤功能这就要上线,在签到这个模块中,由于签到功能只能在公司内部使用,也就是在一个固定的范围内使用,没有像钉钉那样有外勤签到,随着版本的升级,有一个这样的需求,每个公司的地理位置不同(经纬度就不同),公司的上下班时间不同,而且这些东西有可能是变化的,这就导致了统计签到记录的信息不同。

以前这些信息时写死的,不容易变更,本来我想在数据库中设计一张表来维护这些变量,当然,只有管理员才可以维护,但是为了节省访问时间,我就将这一些信息写在了XML里面,这样一来,在某些情况下程序读XML的速度肯定比读取数据库的速度要快,但是要是维护数据,只能修改XML了,不能再手机APP页面上直接操纵了,嗨,鱼和熊掌不可兼得啊!

下面展示一下我的代码

1、 XML存放数据代码

<?xml version="1.0" encoding="utf-8" ?>
<workMessage>
  <Field>100</Field>
  <item>
    <id>beijing</id>
    <ontime>08:30:00</ontime>
    <offtime>17:30:00</offtime>
    <lng>116.605454512445</lng>
    <lat>31.4554521245455</lat>
  </item>
  <item>
    <id>xian</id>
    <ontime>09:00:00</ontime>
    <offtime>18:00:00</offtime>
    <lng>128.5454212545458</lng>
    <lat>64.787445245457841</lat>
  </item>
</workMessage><span style="font-family:SimSun;font-size:18px;"> </span>

2、 实体类

public class WorkMessages
    {
        private string id;
        public string Id
        {
            get { return id; }
            set { id = value; }
        }
        private string ontime;
        public string OnTime
        {
            get { return ontime; }
            set { ontime = value; }
        }
        private string offtime;
        public string OffTime
        {
            get { return offtime; }
            set { offtime = value; }
        }

        private double lat;
        public double Lat
        {
            get { return lat; }
            set { lat = value; }
        }


        private double lng;
        public double Lng
        {
            get { return lng; }
            set { lng = value; }
        }
        public WorkMessages()
        {

        }
        public WorkMessages(string id,string ontime,string offtime,double lat,double lng)
        {
            this.Id = id;
            this.OnTime = ontime;
            this.OffTime = offtime;
            this.Lat = lat;
            this.Lng = lng;
        }

3、 读取XML中的信息

public List<WorkMessages> QueryWorkMessages()
        {
            List<WorkMessages> list = new List<WorkMessages>();
            XmlDocument xml = new XmlDocument();
            xml = XmlManager(HttpContext.Current.Server.MapPath("../XmlConfig/Punch.xml"));
            string id = "";
            string ontime = "";
            string offtime = "";
            double lat = 0.00;
            double lng = 0.00;
            WorkMessages info = null;
            //////////*******下面开始循环读取xml文件信息********/

            foreach (XmlNode node in xml.ChildNodes)
            {
                if (node.Name == "workMessage")
                {
                    foreach (XmlNode node1 in node.ChildNodes)
                    {
                        if (node1.Name == "item")
                        {
                            foreach (XmlNode node2 in node1.ChildNodes)
                            {
                                switch (node2.Name)
                                {
                                    case "id":
                                        id = node2.InnerText;
                                        break;
                                    case "ontime":
                                        ontime = node2.InnerText;
                                        break;
                                    case "offtime":
                                        offtime = node2.InnerText;
                                        break;
                                    case "lat":
                                        lat = Convert.ToDouble(node2.InnerText);
                                        break;
                                    default:
                                        lng = Convert.ToDouble(node2.InnerText);
                                        break;
                                }
                            }
                            info = new WorkMessages(id,ontime,offtime,lat,lng);
                            //将信息保存至集合
                            list.Add(info);
                        }
                    }
                }
            }

            return list;
        }

4、 根据路径加载XML
public XmlDocument XmlManager(string strUrlPath)
        {
            XmlDocument xmlDocument = new XmlDocument();
            if (!File.Exists(strUrlPath))
            {
                throw new Exception("指定的文件路径错误 请重新指定");
            }
            try
            {
                xmlDocument.Load(strUrlPath);
            }
            catch
            {
                throw new Exception("加载XML文档时发生错误");
            }
            return xmlDocument;
        }

小结

用XML代替数据库适合存储比较轻量级的数据,这里我用XML代替数据库的好处是操作简单,访问速度快,缺点是维护困难,需要打开代码往XML中手动添加数据。提醒一下,根据路径读取XML时,XML的路径最好写成相对路径,别写成绝对路径,比如说路径为C:\pagage\punch.xml,如果写成这样,当把程序发布到服务器上的时候程序再读xml有可能就报错了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇