zoukankan      html  css  js  c++  java
  • 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 "";
    }
    }
  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1897277.html
Copyright © 2011-2022 走看看