首页 联系我 返回顶部
不管是在web应用还是桌面程序中,很多地方都会用xml来做一些配置,如你现在所看到的Blog也是用的xml文件作相关配置
首先,我们可以把一个类设为可序列化,然后保存到一个物理磁盘上,读取时再进行反序列化为该类,就可以读取相应的数据了。
[Serializable]
public class ConfigModule
{
    public ConfigModule()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //

    }

    bool blogstate;
    [XmlElement]
    public bool BlogState
    {
        get { return blogstate; }
        set { this.blogstate = value; }
    }
/////......................
}

序列化该类并保存:
 public static void SaveConfigModule(ConfigModule data)
    {
        HttpContext context = HttpContext.Current;
        string configfile = context.Server.MapPath(ConfigurationManager.AppSettings["configFile"]);
        XmlSerializer serializer = new XmlSerializer(typeof(ConfigModule));
        FileStream fs = new FileStream(configfile, FileMode.Create);
        serializer.Serialize(fs, data);
        fs.Close();
    }

读取时进行反序列化。
但这样有一个弊端:就是每增加一个Xml节点时都要改动该类,比较麻烦,如果该xml有20多个节点,那ConfigModule中就有20多个相关的属性。

这里,我们用XmlDocument类来处理会方便很多。
XMLDocument------遵循W3C文档对象模型规范的一级和二级标准,实现XML数据随机的、有缓存的存取。一级水平包含了DOM的最基本的部分,而二级水平增加多种改进,包括增加了对名称空间和级连状图表(CSS)的支持。
假定现在要处理下面的xml文件内容,
<?xml version="1.0" encoding="utf-8"?>
<Config>
  <SiteName>tetete</SiteName>
  <SiteURL>wwwww</SiteURL>
  <ttt>ttt</ttt>
  <asdf>asdfasdf</asdf>
  <aaaa>aaaa</aaaa>
  <bbb>bbb</bbb>
  <ccc>ccc</ccc>
  <dd>ddd</dd>
</Config>

读取:
        StringBuilder sb = new StringBuilder();
        XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath("~/demo.xml"));
        foreach (XmlNode node in doc.ChildNodes[1].ChildNodes)
        {
            sb.Append("节点名:" + node.Name + ",节点值:" + node.InnerText + "<br />");
        }
        this.Main.Text = sb.ToString();

注意这里的doc.ChildNodes会返回2,doc.ChildNodes[0]会返回xml的声明,即:xml version="1.0"
要访问Config下的子节点,就应该是doc.ChildNodes[1].ChildNodes,此时返回的是XmlNodeList,遍历该XmlNodeList就可以得到单独的XmlNode了

修改某一个节点的值:
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/demo.xml"));
doc.GetElementsByTagName("SiteName")[0].InnerText = "新值";
doc.Save(Server.MapPath("~/demo.xml"));
首先要找到要修改的NodeList,然后直接修改其InnerText属性的值,最后Save一下就行了。
XmlDocument.GetElementsByTagName()会返回一个XmlNodeList,因为SiteName只有一个,所以doc.GetElementsByTagName("SiteName")[0]将直接
返回我们需要的XmlNode。

删除某一个节点:
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/demo.xml"));
doc.ChildNodes[1].RemoveChild(doc.GetElementsByTagName("ccc")[0]); //移除ccc这个节点
doc.Save(Server.MapPath("~/demo.xml"));
当然,如果只是读取xml,用XmlReader会更快速。

Write a comment:



(将显示你的Gravatar图标)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

暂时停止交换链接.

评论提交有问题?