首先需要创建一个操作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");
}
