• C#操作XML代码整理


    c#操作XML方法
    using System.Xml;
    using System.IO;

    /// <summary>
    /// XMLProc 的摘要说明
    /// 将数据写入XML文件的方法
    /// SaveXML_DataSet()利用DataSet写入XML文件
    /// SaveXML_XmlTextWriter()利用XmlTextWriter写入XML文件
    /// SaveXML_XmlNode()利用XmlNode写入XML文件
    ///
    /// 从XML文件中读取数据
    /// GetXML_XmlTextReader()
    /// GetXML_XmlNodeReader()
    /// </summary>
    public class XMLProc
    {
    public XMLProc()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    ///<summary>
    /// 利用XmlTextWriter不容易实现追加,也就是说每次写入XML文档的数据都是覆盖式的,不容易实现在原有数据的基础上追加数据,
    /// 而采用XmlNode模式就能方便地实现数据追加
    /// 利用DataSet也不是追加数据
    ///</summary>

    //利用DataSet把数据写入XML文件,不实现追加
    public static string SaveXML_DataSet(BaseInfo.Phonebook pb)
    {
    try
    {
    DataTable dt
    = new DataTable();
    dt.Columns.Add(
    "name", Type.GetType("System.String"));
    dt.Columns.Add(
    "telphone", Type.GetType("System.String"));
    ……

    DataRow dr
    = dt.NewRow();
    dr[
    0] = pb.name;
    dr[
    1] = pb.telphone;
    ……

    dt.Rows.Add(dr);
    System.Data.DataSet ds
    = new DataSet();
    ds.Tables.Add(dt);

    //将DataSet里面的数据写入XML
    ds.WriteXml(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

    return "true";
    }
    catch(Exception ex)
    {
    return ex.ToString();
    }
    }
    //利用xmlTextWriter往XML文件写入数据,没有实现追加
    public static string SaveXMLData_XmlTextWriter(BaseInfo.Phonebook pb)
    {
    try
    {
    //创建一个XmlTextWriter类的实例对象
    System.IO.FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
    //if (!file.Exists)

    XmlTextWriter textWriter
    = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"), System.Text.Encoding.UTF8);

    //开始写过程,调用WriterStartDocument方法写入文件头信息
    //例如<?xml version="1.0" encoding="utf-8"?>
    textWriter.WriteStartDocument();

    //写入根节点<phonebook></phonebook>
    textWriter.WriteStartElement("phonebook");
    textWriter.WriteStartElement(
    "member");

    //写入节点name
    textWriter.WriteStartElement("name", "");
    //为name节点写入用户输入的值
    textWriter.WriteString(pb.name);
    //写入name节点的结束符
    textWriter.WriteEndElement();

    textWriter.WriteStartElement(
    "telphone", "");
    textWriter.WriteString(pb.telphone);
    textWriter.WriteEndElement();

    ……

    //写入文档结束,调用WriteEndDocument方法
    textWriter.WriteEndDocument();

    //关闭textWriter
    textWriter.Close();

    return "true";
    }
    catch (Exception ex)
    {
    return ex.ToString();
    }
    }
    //利用XmlNode往XML文件写入数据,可以实现追加
    public static string SaveXMLData_XmlNode(BaseInfo.Phonebook pb)
    {
    try
    {
    //创建一个XmlDocument 对象,用于载入存储信息的XML文件
    System.Xml.XmlDocument xdoc = new XmlDocument();
    xdoc.Load(System.Web.HttpContext.Current.Server.MapPath(
    "phonebook.xml"));
    //创建一个menber节点并将它添加到根节点下
    XmlElement parentNode = xdoc.CreateElement("member");
    xdoc.DocumentElement.PrependChild(parentNode);
    //创建所有用于存储信息的节点
    XmlElement nameNode = xdoc.CreateElement("name");
    XmlElement telphoneNode
    = xdoc.CreateElement("telphone");
    ……

    ///获取文本信息
    XmlText nameText = xdoc.CreateTextNode(pb.name);
    XmlText telphoneText
    = xdoc.CreateTextNode(pb.telphone);
    ……

    ///将上面的各个存储信息节点添加到menber节点下,但并不包含最终的值
    parentNode.AppendChild(nameNode);
    parentNode.AppendChild(telphoneNode);
    ……

    ///将上面获取的文本信息添加到与之相对应的节点中
    nameNode.AppendChild(nameText);
    telphoneNode.AppendChild(telphoneText);
    ……

    ///保存存储信息的XML文件
    xdoc.Save(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

    return "true";
    }
    catch (Exception ex)
    {
    return ex.ToString();
    }
    }

    //XmlTextReader类实现的查找程序
    public static string GetXML_XmlTextReader(string keyName)
    {
    //XMLTextReader读取XML文件
    XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
    if (keyName == "")
    {
    string outMsg = "";
    string currentNodeName = "";
    int i = 1;
    //利用xmltextreader对象的Read()方法循环读取文件的节点
    while (xmltextreader.Read())
    {
    //当节点类型是元素的时候,记录该节点名称
    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
    {
    currentNodeName
    = xmltextreader.LocalName.ToString();
    }
    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
    {
    //把这个人的属性组织成文本串,便天页面输出
    outMsg += "<tr bgColor=#fff5b1><td>" + currentNodeName + "</td><td>" + xmltextreader.Value + "</td></tr>";
    }
    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
    {
    outMsg
    += "<tr><td>联系人:</td><td><font color=red>(" + (i++) + ")</font></td></tr>";
    }
    }
    outMsg
    = "<table>" + outMsg + "</table>";
    //关闭xmltextreader
    xmltextreader.Close();

    //显示联系人的详细信息
    //Response.Write(outMsg);
    return outMsg;
    }
    else
    {
    //XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
    bool findflag = false;
    string outMsg = "<table><tr><td collspan=2><font color=red>已经查找到下列联系人:</font></td></tr>";
    string currentNodeName = "";
    //利用xmltextreader对象的Read()方法自我表现读取文件的节点
    while (xmltextreader.Read())
    {
    //当找到了要查找的人,并且当前节点为元素,并且节点名称为"member"时退出循环
    if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
    {
    break;
    }
    //当节点类型是元素的时候,记录该节点名称
    if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
    {
    currentNodeName
    = xmltextreader.LocalName.ToString();
    }
    //还没有查找到指定的人,并且当前节点类型为文本,并且当前节点的节点值与要查找的人符合时
    if ((findflag == false) && (xmltextreader.NodeType == System.Xml.XmlNodeType.Text) && (xmltextreader.Value == keyName))//当为文本类型同时对应的值为要查找的人的时候
    {
    findflag
    = true;//设置找到了要查找的人的标志
    }
    //如果已经找到,并且当前节点类型为文本时,循环记录这个人的所有信息
    if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
    {
    outMsg
    += "<tr bgcolor=#fff5b1><td align=right>" + currentNodeName + ":</td><td>" + xmltextreader.Value + "</td></tr>";
    }
    //如果已经找到了这个人,同时Xtr当前为文本类型,那么
    }
    //关闭xmltextreader
    xmltextreader.Close();
    outMsg
    += "</table>";

    //显示查找的人的详细信息
    //Response.Write(outMsg);
    return outMsg;
    }
    }
    //利用XmlNodeReader实现查找的程序
    public static string GetXML_XmlNodeReader(string keyName)
    {
    XmlDocument xml
    = new XmlDocument();
    bool findNode = false;

    try
    {
    xml.Load(System.Web.HttpContext.Current.Server.MapPath(
    "phonebook.xml"));
    }
    catch
    { }

    XmlNodeReader read
    = new XmlNodeReader(xml);
    while (read.Read())
    {
    if (read.NodeType == System.Xml.XmlNodeType.Element && read.LocalName.ToString().Equals(keyName))
    {
    read.Read();
    if (read.NodeType == System.Xml.XmlNodeType.Text)
    {
    //Response.Write(read.Value);
    return read.Value;
    //break;
    }
    }
    }
    return "";
    }
    }
  • 相关阅读:
    C++使用GDI+实现图片格式转换
    易语言调用C++写的DLL
    【PE】手动给PE文件添加一段代码MessageBoxA
    SHGetSpecialFolderLocation获取开始文件夹
    MySQL导入导出数据
    MySQL5.7修改密码
    Elasticsearch 基于external的乐观锁的版本控制
    Elasticsearch修改字段类型 (_reindex)
    es 迁移数据, 重建索引
    SHELL
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1897277.html
Copyright © 2020-2023  润新知