public class OperateXML{/// <summary>/// 文件全路径/// </summary>private  string fullFilePath;private string DbName= "SpiderWeb";private string DbCollectionName= "Data";MongoClient _Client = null;public FilterDefinitionBuilder<BsonDocument> Filter { get; private set; }public ProjectionDefinitionBuilder<BsonDocument> Projection { get; private set; }/// <summary>/// 文件方式/// </summary>private FileInfo InfoFile{get{return new FileInfo(fullFilePath);}}/// <summary>/// 添加XML节点/// </summary>/// <param name="item"></param>public void  AddItem(DataBaseItem item){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(fullFilePath);XmlNode root = xmlDoc.SelectSingleNode("ArrayOfDataBaseItem");XmlElement xe = xmlDoc.CreateElement("DataBaseItem");//创建一个具有指定名称的子节点Type t = item.GetType();foreach(PropertyInfo ppi in  t.GetProperties()){object value = ppi.GetValue(item, null);string name = ppi.Name;XmlElement xmlsub = xmlDoc.CreateElement(name);//创建一个具有指定名称的元素if (value == null)value = string.Empty;xmlsub.InnerText = value.ToString();//设置该元素的值xe.AppendChild(xmlsub);//将该元素添加到item子节点的尾部}root.AppendChild(xe);//将创建的item子节点添加到items节点的尾部xmlDoc.Save(fullFilePath);//保存xml文件,}/// <summary>/// 修改XML节点/// </summary>/// <param name="item"></param>public void AlterItem(DataBaseItem item,string NodeName){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(this.fullFilePath);XmlNode xn = xmlDoc.SelectSingleNode("ArrayOfDataBaseItem");XmlNodeList xnl = xn.ChildNodes;if(xnl.Count>0){int i = 0;foreach (XmlElement e in xnl[0].ChildNodes){if (e.Name == NodeName){break;}i++;}foreach (XmlNode xnf in xnl){XmlNodeList xnf1 = xnf.ChildNodes;if (xnf1[i].InnerText == item.SpiderName){Type t = item.GetType();int j = 0;foreach (PropertyInfo ppi in t.GetProperties()){object value = ppi.GetValue(item, null);xnf1[j].InnerText = value.ToString();//设置该元素的值 j++;}}}xmlDoc.Save(this.fullFilePath);//再一次强调 ,一定要记得保存的该XML文件}}/// <summary>/// 删除指定的XML节点/// </summary>/// <param name="spiderName"></param>private void DelXml(string  spiderName,string NodeName){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(this.fullFilePath);XmlNodeList xnl = xmlDoc.SelectSingleNode("ArrayOfDataBaseItem").ChildNodes;if (xnl.Count>0){int i = 0;foreach (XmlElement e in xnl[0].ChildNodes){if (e.Name == NodeName){break;}i++;}foreach (XmlNode xn in xnl){XmlNodeList xnchilds = xn.ChildNodes;if (xnchilds[i].InnerText == spiderName){xn.ParentNode.RemoveChild(xn);}}xmlDoc.Save(this.fullFilePath);}}private DataBaseItem GetDataBaseItem(string spiderName,string NodeName){var item = new DataBaseItem();return item;}/// <summary>/// 获取数据库信息/// </summary>/// <returns></returns>public List<DataBaseItem> GetDBsInfoFromXML(){var dataBaseList = new List<DataBaseItem>();if (InfoFile.Exists){XmlSerializer xml = new XmlSerializer(dataBaseList.GetType());using (Stream s = InfoFile.OpenRead()){try{dataBaseList = xml.Deserialize(s) as List<DataBaseItem>;}catch(Exception e){Console.WriteLine(e.Message);}}}return dataBaseList;}/// <summary>/// 获取数据库信息/// </summary>/// <returns></returns>public List<DataBaseItem> GetDBsInfoFromMongoDB(){var dataBaseList = new List<DataBaseItem>();var SpiderDataBase = _Client.GetDatabase(DbName);var SpiderColletion = SpiderDataBase.GetCollection<BsonDocument>(DbCollectionName);//var Spiders = SpiderColletion.Find(Filter.Empty).Project(Projection.As<SpiderRunEntity>()).ToList();var Filter = Builders<BsonDocument>.Filter;var builder = Builders<BsonDocument>.Sort;var sort = builder.Descending("_id");IAsyncCursor<BsonDocument> Cursor;try{Cursor = SpiderColletion.Find(Filter.Empty).Sort(sort).ToCursor();}catch (Exception e){Console.WriteLine(e.Message);return null;}while (Cursor.MoveNext()){foreach (var Document in Cursor.Current){DataBaseItem item = new DataBaseItem();foreach (var val in Document.Elements){Type Ts = item.GetType();object v = Convert.ChangeType(val.Value, Ts.GetProperty(val.Name).PropertyType);Ts.GetProperty(val.Name).SetValue(item, v, null);}dataBaseList.Add(item);}}return dataBaseList;}/// <summary>/// 生成Xml文件/// </summary>private void CreateXmlFile(List<DataBaseItem> dataBases){XmlSerializer xmls = new XmlSerializer(dataBases.GetType());using (Stream s = InfoFile.OpenWrite()){xmls.Serialize(s, dataBases);}}/// <summary>/// 从数据库中获取数据,更新XML文件/// </summary>private void UpdateXmlFile(){var databaseListMongodb = GetDBsInfoFromMongoDB();try{Dictionary<string, DataBaseItem> databaseDicXML = GetDBsInfoFromXML().ToDictionary(key => key.SpiderName, value => value);foreach (var db in databaseListMongodb){if (!databaseDicXML.ContainsKey(db.SpiderName))AddItem(db);}}catch(Exception e){Console.WriteLine(e.Message);}}/// <summary>/// 创建XML文件/// </summary>private void CreateXmlFile(){if(!File.Exists( this.fullFilePath)){List<DataBaseItem> dataBaseList = new List<DataBaseItem>();XmlSerializer xmls = new XmlSerializer(dataBaseList.GetType());using (Stream s = InfoFile.OpenWrite()){xmls.Serialize(s, dataBaseList);}}}public OperateXML(string filename,string dbName,string collectionName){_Client = new MongoClient("mongodb://192.168.106.56:27017");DbName = dbName;DbCollectionName=collectionName;string appStartPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);StringBuilder builder = new StringBuilder();builder.Append(appStartPath);builder.Append("\\DatebaseXML\\");System.IO.DirectoryInfo directoryInfo = new DirectoryInfo(builder.ToString());if (!directoryInfo.Exists){directoryInfo.Create();//创建一个}builder.Append(filename);this.fullFilePath = builder.ToString();CreateXmlFile();UpdateXmlFile();}public OperateXML(){_Client = new MongoClient("mongodb://192.168.106.56:27017");string appStartPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);StringBuilder builder = new StringBuilder();builder.Append(appStartPath);builder.Append("\\DatebaseXML\\");System.IO.DirectoryInfo directoryInfo = new DirectoryInfo(builder.ToString());if (!directoryInfo.Exists){directoryInfo.Create();//创建一个}builder.Append("DateBasesXml.xml");this.fullFilePath = builder.ToString();CreateXmlFile();UpdateXmlFile();}}public class DataBaseItem{public string _id { get; set; }public string SpiderName { get;  set; }public string WebName { get;  set; }public DateTime LastDateTime { get;  set; }public int RunningStatus { get;  set; }public string IndexUrl { get;  set; }public string Describe { get;  set; }}

从数据库中读取数据,创建XML文件并更新维护XML相关推荐

  1. 基于JDBC从数据库中读取数据,在百度地图批量标注地点

    基于JDBC从数据库中读取数据,在百度地图批量标注地点 一.相关技术 JSP,JDBC,JSON,JS,百度地图API 二.基于JDBC从数据库读取数据 见"JSP基于JDBC操作MSSQL ...

  2. 我刚做的一个TreeView的CheckBox进行选中插入数据库,从数据库中读取数据后让CheckBox勾选的代码!...

    #region 绑定角色     /// <summary>     /// 绑定权限信息     /// </summary>     protected void Bind ...

  3. python读文件和写文件-python开发--从文件中读取数据和写入文件

    #! /usr/bin/env python -*- coding:utf-8 -*- """ @Author:gcan @Email:1528667112@qq.com ...

  4. java实现k-means算法(用的鸢尾花iris的数据集,从mysq数据库中读取数据)

    k-means算法又称k-均值算法,是机器学习聚类算法中的一种,是一种基于形心的划分方法,其中每个簇的中心都用簇中所有对象的均值来表示.其思想如下: 输入: k:簇的数目: D:包含n个对象的数据集. ...

  5. 【存储过程】从数据库中读取数据保存到文件中

    2019独角兽企业重金招聘Python工程师标准>>> 由于初期规划不好,项目管理的action都存入到数据库中了,而实际上应该以配置文件的形式保存的,所以现在想改过来.一条条复制是 ...

  6. mysql数据库中插入数据并进行自动迭代更新

    问题 我们知道在数据库中保证数据的唯一性是十分必要的,这也就是有主键的一个原因,但是数据肯定是需要更新的,当然我们可以按照日期或者其他维度进行数据的永不冲突的更新.但是还有一种情况下需要我们迭代的去更 ...

  7. 使用python实现微博评论分词与关键词提取(从MySQL数据库中读取数据)

    一.实验环境 (1)Windows操作系统: (2)PyCharm 2019.1. (3)数据库用户名为 root,密码为 123456. (4)  学校机房电脑,带有mysql 二.获取数据库信息 ...

  8. R从文件中读取数据,输出文件

    看了几天的书,终于到这一步了,说实话,用R来做统计,很少有人手动的去输入那些数字,肯定是从别的地方导入的,我们用来处理就可以了,所以到这里才算是真正的入门,前面都是做基础的练手. 我学习R从<R ...

  9. html读mysql数据_html从数据库中读取数据

    展开全部 html只能通过ajax接口跟后台数据库接口通信,然后取出来的数据在页面上显636f70793231313335323631343130323136353331333337626135示. ...

  10. PHP从数据库中读取数据并打印

    示例如下: $con=mysql_connect('localhost','root','');//数据库信息 mysql_select_db('shop');//数据库名 mysql_query(& ...

最新文章

  1. SER SERVER存储过程
  2. 软件工程2018第二次团队作业
  3. 16 级高代 II 思考题十的多种证明
  4. mitmdump脚本中使用requests模块发送请求
  5. PMCAFF推荐 | YC主席:75%的创业团队走出孵化器就忘了本,开始干虚假工作
  6. 编译原理总结(个人向)
  7. JQuery操作类数组的工具方法
  8. Swift iOS : 代码分析DrawController
  9. 关于log4j的配置
  10. PyMuPDF 拼版(一)
  11. Deep Speech笔记
  12. 西安市建筑物矢量数据(Shp格式+带高度)
  13. 硬编码失败问题Codec reported err 0x80000000, actionCode 0, while in state 5
  14. 妻子决定你未来的事业高度
  15. mysql8.0 之 sql 优化《三B》 之 优化范围查询 总览 总结
  16. python中slice是什么类型,python中slice是什么类型_在python中,slice是一个副本还是一个poin...
  17. 通过IDM提高QQ群文件下载速度
  18. Kafka命令及相关参数解释
  19. 二代测序linux软件,二代测序数据分析软件包大全
  20. 通过PaddleOCR识别PDF

热门文章

  1. 【车间调度】基于matlab免疫遗传算法求解多目标生产调度问题【含Matlab源码 710期】
  2. 【优化预测】基于matlab遗传算法优化RBF神经网络预测【含Matlab源码 451期】
  3. 【CVRP】基于matlab遗传算法求解带容量的车辆路径规划问题【含Matlab源码 162期】
  4. linux access函数报错,详解汇编语言MOV指令
  5. python:遍历文件夹下的所有文件
  6. 【C++】pair对组创建
  7. codeblock无法新建工程_【工程前沿】专业专注凸显市政“制造” ——八公司太原南站东广场配套路网工程施工纪实...
  8. matlab 串口 事件,MATLAB 串口通信
  9. ajax 循环php数组,使用Jquery,AJAX,PHP和数组进行实时更新
  10. SQL Server 2017 AlwaysOn AG 自动初始化(九)