http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 19795|回复: 8

[Asp.Net] C#操作Xml(增、删、改、查)限制访问IP操作

[复制链接]
发表于 2012-7-2 11:50:53 | 显示全部楼层 |阅读模式
C#Xml操作(增、删、改、查)限制访问IP操作
本文主要是以C#xml的XmlDocument 为主
总结一下C#操作Xml的方式
Xml文件如下所示
[HTML] 纯文本查看 复制代码
<?xml version="1.0" standalone="yes"?>
<dbGuest>
<User>
    <Name>Guset</Name>
    <City>上海</City>
    <Email>fdfd</Email>
</User>
<User>
    <Name>Gu</Name>
    <City>上海</City>
    <Email>fdfd</Email>
</User>
</dbGuest>

下面是一个简单的增删改查的类大家看一下就明白了
[C#] 纯文本查看 复制代码
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.XPath;
namespace DsAndXML.OpXMLFile
{
/// <summary>
/// Main 的摘要说明。
/// </summary>
public partial class Main : System.Web.UI.Page
{
   protected void Page_Load(object sender, System.EventArgs e)
   {
    // 在此处放置用户代码以初始化页面
    if(!IsPostBack)
    Bind();
   }
        //绑定数据
   private void Bind()
   {
    DataSet ds = new DataSet();
    ds.ReadXml(Server.MapPath(".\\db\\dbGuest.xml"));
    dgShow.DataSource = ds.Tables[0].DefaultView;
    dgShow.DataBind();
    XmlDocument doc = new XmlDocument();
    doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
    XmlNodeList elemList = doc.GetElementsByTagName("Name");
    ddlName.Items.Clear();
    for(int i=0;i<elemList.Count;i++)
    ddlName.Items.Add(elemList.InnerXml);
   
   }
   #region Web Form Designer generated code
   override protected void OnInit(EventArgs e)
   {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
   }
  
   /// <summary>
   /// 设计器支持所需的方法 - 不要使用代码编辑器修改
   /// 此方法的内容。
   /// </summary>
   private void InitializeComponent()
   {   
   }
   #endregion
        //查询一个数据
   protected void btnQuery_Click(object sender, System.EventArgs e)
   {
    XmlDocument doc = new XmlDocument();
    doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
      lbEmail.Text = doc.SelectSingleNode("//User[Name='"+ddlName.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText;
         
   }
        //修改一个数据
   protected void btnChange_Click(object sender, System.EventArgs e)
   {
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            xmlDoc.SelectSingleNode("//User[Name='"+ddlName.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText = tbNewMail.Text.ToString().Trim();//获取dbGuest节点的所有子节点
    xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
    Bind();
   }
        //删除一个数据
   protected void btnDelete_Click(object sender, System.EventArgs e)
   {
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
            xmlDoc.SelectSingleNode("//User[Name='" + ddlName.SelectedItem.Text + "']").RemoveAll();
            xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
            Bind();
   }
        //添加一个数据
   protected void btnAdd_Click(object sender, System.EventArgs e)
   {
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
    XmlNode root=xmlDoc.SelectSingleNode("dbGuest");//查找<dbGuest>
    XmlElement xe1=xmlDoc.CreateElement("User");//创建一个<User>节点
    XmlElement xesub1=xmlDoc.CreateElement("Name");
    xesub1.InnerText="Guset";//设置文本节点
    xe1.AppendChild(xesub1);//添加到<User>节点中
    XmlElement xesub2=xmlDoc.CreateElement("City");
    xesub2.InnerText="郑州";
    xe1.AppendChild(xesub2);
    XmlElement xesub3=xmlDoc.CreateElement("Email");
    xesub3.InnerText="[url=mailto:sufei.1013@163.com]sufei.1013@163.com[/url]";
    xe1.AppendChild(xesub3);
    root.AppendChild(xe1);//添加到<dbGuest>节点中
    xmlDoc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
    Bind();
   }
}
}

这个例子很是经典希望大家能用的上啊
下面一起来看看怎么读取所有Xml内容的方法
[C#] 纯文本查看 复制代码
string strXml = File.ReadAllText(Server.MapPath("~\\Xml\\Messages.txt")).ToString();
        ClientScriptManager csm = this.ClientScript;
        csm.RegisterStartupScript(this.GetType(), "sufei",strXml);
[/code]
下面再来看一下面这个Xml文件
[code=html]<?xml version="1.0" encoding="UTF-8"?>
<ipcount>
  <url>
    <value>192.168.1.250</value>
    <!--接入IP就是访问本站的IP-->
    <count>150</count>
    <!--本IP访问次数-->
  </url>
  <url>
    <value>192.168.26.25</value>
    <count>29</count>
  </url>
</ipcount>

下面咱们要完成的工作就是限制IP的问题,这个应该是每个网站都有的情况下面我提供一个方法大家看一下就明白了。
[C#] 纯文本查看 复制代码
  #region 文件操作
        /// <summary>
        /// 传入一个IP查询出这个IP对应的今日查询次数
        /// </summary>
        /// <param name="ip">IP</param>
        /// <returns>返回是否验证通过True是通过</returns>
        public static Boolean SelectIpToCount(string ip, string _filePath)
        {
            //真值是通过
            Boolean returnboolean = false;
            //定义文件名和路径
            _filePath = _filePath + DateTime.Now.ToString("yyyy-MM-dd") + ".xml";
            //检查是否创建文档成功
            if (CreateXmlFile(_filePath))
            {
                //检查来源IP是否为空
                if (ip != null)
                {
                    //查询配置的最高查询次数
                    int ipcount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["IpCount"].Trim());
                    //XmlDocument
                    XmlDocument objdoc = new XmlDocument();
                    //加载Xml文档
                    objdoc.Load(_filePath);
                    //IP对应的查询次数
                    string ipnode = "";
                    //取到相应IP的Count节点//是在全部范围内查询,/是在指定结构中查询
                    XmlNode xmlnode = objdoc.SelectSingleNode("//ip[value='" + ip + "']/count");
                    //验证是否取存在Count节点
                    if (xmlnode != null)
                        ipnode = xmlnode.InnerText.Trim();
                    //验证是否存在数据
                    if (ipnode != null && ipnode != "")
                    {
                        //查询Xml文档里的数据
                        int xmlipcount = Convert.ToInt32(ipnode.Trim());
                        //验证当前的查询次数是否超出最高限制,最高限制可以在Config文档里进行配置 
                        if (xmlipcount <= ipcount)
                        {
                            //修改次数
                            objdoc.SelectSingleNode("//ip[value='" + ip + "']/count").InnerText =
                                (xmlipcount + 1).ToString();
                            //保存修改后的结果
                            objdoc.Save(_filePath);
                            returnboolean = true;
                        }
                        else
                        {
                            returnboolean = false;
                        }
                    }
                    else
                    {
                        //添加一个之前先找到根节点
                        XmlNode root = objdoc.SelectSingleNode("ipcount");
                        //学节点
                        XmlNode xmlip = objdoc.CreateElement("ip");
                        //IP下的Value节点
                        XmlNode xmlvalue = objdoc.CreateElement("value");
                        xmlvalue.InnerText = ip;
                        //添加到IP
                        xmlip.AppendChild(xmlvalue);
                        //IP下的count节点
                        XmlNode xmlcount = objdoc.CreateElement("count");
                        xmlcount.InnerText = "1";
                        //添加到IP
                        xmlip.AppendChild(xmlcount);
                        //把IP添加的根节点
                        root.AppendChild(xmlip);
                        //保存文档 
                        objdoc.Save(_filePath);
                        returnboolean = true;
                    }
                }
                else
                {
                    returnboolean = false;
                }
            }
            else
            {
                returnboolean = false;
            }
            return returnboolean;
        }
        /// <summary>
        /// 创建Xml文件 的方法
        /// </summary>
        /// <param name="filepath">路径</param>
        /// <returns></returns>
        private static Boolean CreateXmlFile(string filepath)
        {
            try
            {
                //记录成功时的记录
                if (!File.Exists(filepath))
                {
                    string TOEXCELLR1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ipcount></ipcount>";
                    StreamWriter xmlfs = new StreamWriter(filepath, true, System.Text.Encoding.UTF8);
                    xmlfs.Write(TOEXCELLR1);
                    xmlfs.Close();
                    return true;
                }
                else
                {
                    return true;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion

使用方法更简单
看代码
SelectIpToCount(ip, filepath)  IP就是人本次访问的IP,filepath就是文件路径在这里只要指定到文件夹就行了,我上面的方法会自动每天创建一个新的文件,这样防止数量太大,执行比较慢的可能性。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-3-19 11:51:31 | 显示全部楼层
[C#] 纯文本查看 复制代码
    XmlDocument XmlDoc = new XmlDocument();
                //读取XML文档
                XmlDoc.Load(@"D:\我的文档\桌面\VS2010.xml");
                XmlNode xe = XmlDoc.SelectSingleNode("//LinkMan[Name='']");
                xe.ParentNode.RemoveChild(xe);
                XmlDoc.Save(@"D:\我的文档\桌面\VS2010.xml");

删除当前节点。
发表于 2014-6-13 12:47:32 | 显示全部楼层
强烈支持楼主ing……
发表于 2014-6-13 13:19:23 | 显示全部楼层
强烈支持楼主ing……
发表于 2014-9-5 23:35:21 | 显示全部楼层
强烈支持楼主ing……
发表于 2014-9-10 16:53:36 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-19 21:45

© 2014-2021

快速回复 返回顶部 返回列表