ASP.NET使用XML作为网站配置文件

作者(出处):百宝箱工作室发布时间:2016年7月19日 22:20:55查阅量:761

首先需要创建一个操作XML文件的类,其代码如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Xml;

/// <summary>
/// XmlConfigUtil 的摘要说明
/// </summary>
public class XmlConfigUtil
{
    #region 调用方式
    //初始化并指定文件路径
    //XmlConfigUtil util = new XmlConfigUtil("C:\\1.xml");

    //写入要保存的值以及路径(System、Menu.....都是路径)  params string[] 的方式
    //util.Write("testValue", "System", "Menu");

    //读取System/Menu下的值
    //Console.WriteLine(util.Read("System", "Menu"));
    //文件路径存在则正常读取,不存在则自动创建。
    #endregion

    #region 全局变量
    string _xmlPath;        //文件所在路径
    #endregion

    #region 构造函数
    /// <summary>
    /// 初始化一个配置
    /// </summary>
    /// <param name="xmlPath">配置所在路径</param>
    public XmlConfigUtil(string xmlPath)
    {
        _xmlPath = Path.GetFullPath(xmlPath);
    }
    #endregion

    #region 公有方法
    /// <summary>
    /// 写入配置
    /// </summary>
    /// <param name="value">写入的值</param>
    /// <param name="nodes">节点</param>
    public void Write(string value, params string[] nodes)
    {
        //初始化xml
        XmlDocument xmlDoc = new XmlDocument();
        if (File.Exists(_xmlPath))
            xmlDoc.Load(_xmlPath);
        else
            xmlDoc.LoadXml("<XmlConfig />");
        XmlNode xmlRoot = xmlDoc.ChildNodes[0];

        //新增、编辑 节点
        string xpath = string.Join("/", nodes);
        XmlNode node = xmlDoc.SelectSingleNode(xpath);
        if (node == null)    //新增节点
        {
            node = makeXPath(xmlDoc, xmlRoot, xpath);
        }
        node.InnerText = value;

        //保存
        xmlDoc.Save(_xmlPath);
    }

    /// <summary>
    /// 读取配置
    /// </summary>
    /// <param name="nodes">节点</param>
    /// <returns></returns>
    public string Read(params string[] nodes)
    {
        XmlDocument xmlDoc = new XmlDocument();
        if (File.Exists(_xmlPath) == false)
            return null;
        else
            xmlDoc.Load(_xmlPath);

        string xpath = string.Join("/", nodes);
        //XmlNode node = xmlDoc.SelectSingleNode("/App_Data/" + xpath);
        XmlNode node = xmlDoc.SelectSingleNode(xpath);
        if (node == null)
            return null;

        return node.InnerText;
    }
    #endregion

    #region 私有方法
    //递归根据 xpath 的方式进行创建节点
    static private XmlNode makeXPath(XmlDocument doc, XmlNode parent, string xpath)
    {

        // 在XPath抓住下一个节点的名称;父级如果是空的则返回
        string[] partsOfXPath = xpath.Trim('/').Split('/');
        string nextNodeInXPath = partsOfXPath.First();
        if (string.IsNullOrEmpty(nextNodeInXPath))
            return parent;

        // 获取或从名称创建节点
        XmlNode node = parent.SelectSingleNode(nextNodeInXPath);
        if (node == null)
            node = parent.AppendChild(doc.CreateElement(nextNodeInXPath));

        // 加入的阵列作为一个XPath表达式和递归余数
        string rest = String.Join("/", partsOfXPath.Skip(1).ToArray());
        return makeXPath(doc, node, rest);
    }
    #endregion
}

其次,在页面输入要设置的内容,具体代码如下:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <p>设置配置文件(姓名、word、excle、ppt可以认为是四个完全不相关的变量,可以是相关的变量)</p>
        <p>姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></p>
        <p>word:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></p>
        <p>excle:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></p>
        <p>ppt:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></p>
        <asp:Button ID="Button1" runat="server" Text="确  定" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>

再次,就是把要设置的内容写入XML文件,具体代码如下:

        //初始化并指定文件路径
        string SetXmlValueA = TextBox1.Text.ToString();
        string SetXmlValueB = TextBox2.Text.ToString();
        string SetXmlValueC = TextBox3.Text.ToString();
        string SetXmlValueD = TextBox4.Text.ToString();
        XmlConfigUtil util = new XmlConfigUtil(HttpContext.Current.Server.MapPath("../App_Data/Test.xml"));

        //写入要保存的值以及路径(System、Menu.....都是路径)  params string[] 的方式
        util.Write(SetXmlValueA, "Student", "name");
        util.Write(SetXmlValueB, "Student", "word");
        util.Write(SetXmlValueC, "Student", "excel");
        util.Write(SetXmlValueD, "Student", "ppt");

如果在App_Data文件夹存在Test.xml文件,则往里面写入内容;不存Test.xml文件,则创建该文件然后写入内容。执行写入操作后,打开XML文件可以看到是这样显示的:

<XmlConfig>
  <Student>
    <name>张三</name>
    <word>98</word>
    <excel>88</excel>
    <ppt>78</ppt>
  </Student>
</XmlConfig>

最后,在需要显示内容的网页调用XML读取出来即可,前台代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="t2.aspx.cs" Inherits="shiyan_t2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <%=terms%>
    </div>
    </form>
</body>
</html>

后台调用代码为:

    public string terms = string.Empty;
    protected void Page_Load(object sender, EventArgs e)
    {
        string filePath = HttpContext.Current.Server.MapPath("../App_Data/Test.xml");
        XmlConfigUtil util = new XmlConfigUtil(filePath);
        //调用方法1
        //terms = util.Read("XmlConfig/Student", "name");
        //调用方法2
        terms = util.Read("XmlConfig","Student", "name");
    }
百宝箱网络工作室  版权所有  
站长QQ:1617818397  站长E-mail:1617818397@qq.com
Powered by www.baibaox.com  Copyright © 2011-2018
点击这里给我发消息