`
search2008
  • 浏览: 14935 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

用DataSet操作XML

 
阅读更多

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// 用DataSet操作XML
/// </summary>
public class XmlHandle
{
    #region GetDataSetByXml 读取xml直接返回DataSet
    /// <summary>
    /// 读取xml直接返回DataSet
    /// </summary>
    /// <param name="strPath">Xml的相对路径</param>
    /// <returns>已装入XML文档的DataSet</returns>
    public static DataSet GetDataSetByXml(string strXmlPath)
    {
        try
        {
            DataSet ds = new DataSet();
            //读取XML到DataSet
            ds.ReadXml(GetXmlFullPath(strXmlPath));
            if (ds.Tables.Count > 0)
            {
                return ds;
            }
            return null;
        }
        catch (Exception)
        {
            return null;
        }
    }
    #endregion

    #region GetDataViewByXml 读取Xml返回一个经排序或筛选后的DataView
    /// <summary>
    /// 读取Xml返回一个经排序或筛选后的DataView
    /// </summary>
    /// <param name="strXmlPath"></param>
    /// <param name="strWhere">筛选条件,如:"name = 'kgdiwss'"</param>
    /// <param name="strSort">排序条件,如:"Id desc"</param>
    /// <returns></returns>
    public static DataView GetDataViewByXml(string strXmlPath, string strWhere, string strSort)
    {
        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml(GetXmlFullPath(strXmlPath));
            //创建DataView来完成排序或筛选操作
            DataView dv = new DataView(ds.Tables[0]);
            if (strSort != null)
            {
                //对DataView中的记录进行排序
                dv.Sort = strSort;
            }
            if (strWhere != null)
            {
                //对DataView中的记录进行筛选,找到我们想要的记录
                dv.RowFilter = strWhere;
            }
            return dv;
        }
        catch (Exception)
        {
            return null;
        }
    }
    #endregion

    #region WriteXmlByDataSet 向Xml文件插入一行数据
    /// <summary>
    /// 向Xml文件插入一行数据
    /// </summary>
    /// <param name="strXmlPath">xml文件相对路径</param>
    /// <param name="Columns">要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};</param>
    /// <param name="ColumnValue">要插入行每列的值数组,如:string[] ColumnValue={"kgdiwss","false"};</param>
    /// <returns>成功返回true,否则返回false</returns>
    public static bool WriteXmlByDataSet(string strXmlPath, string[] Columns, string[] ColumnValue)
    {
        try
        {
            //根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下
            //string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";
            DataSet ds = new DataSet();
            //读xml架构,关系到列的数据类型
            //ds.ReadXmlSchema(GetXmlFullPath(strXmlPath));
            ds.ReadXml(GetXmlFullPath(strXmlPath));
            DataTable dt = ds.Tables[0];
            //在原来的表格基础上创建新行
            DataRow newRow = dt.NewRow();

            //循环给 一行中的各个列赋值
            for (int i = 0; i < Columns.Length; i++)
            {
                newRow[Columns[i]] = ColumnValue[i];
            }
            dt.Rows.Add(newRow);
            dt.AcceptChanges();
            ds.AcceptChanges();
            ds.WriteXml(GetXmlFullPath(strXmlPath));
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
    #endregion

    #region UpdateXmlRow 更行符合条件的一条Xml记录
    /// <summary>
    /// 更行符合条件的一条Xml记录
    /// </summary>
    /// <param name="strXmlPath">XML文件路径</param>
    /// <param name="Columns">列名数组</param>
    /// <param name="ColumnValue">列值数组</param>
    /// <param name="strWhereColumnName">条件列名</param>
    /// <param name="strWhereColumnValue">条件列值</param>
    /// <returns></returns>
    public static bool UpdateXmlRow(string strXmlPath, string[] Columns, string[] ColumnValue, string strWhereColumnName, string strWhereColumnValue)
    {
        try
        {
            //同上一方法
            //string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";

            DataSet ds = new DataSet();
            //读xml架构,关系到列的数据类型
            //ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
            ds.ReadXml(GetXmlFullPath(strXmlPath));

            //先判断行数
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    //如果当前记录为符合Where条件的记录if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
                    {
                        //循环给找到行的各列赋新值
                        for (int j = 0; j < Columns.Length; j++)
                        {
                            ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j];
                        }
                        //更新DataSet
                        ds.AcceptChanges();
                        //重新写入XML文件
                        ds.WriteXml(GetXmlFullPath(strXmlPath));
                        return true;
                    }
                }
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }
    #endregion

    #region DeleteXmlAllRows 删除所有行
    /// <summary>
    /// 删除所有行
    /// </summary>
    /// <param name="strXmlPath">XML路径</param>
    /// <returns></returns>
    public static bool DeleteXmlAllRows(string strXmlPath)
    {
        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml(GetXmlFullPath(strXmlPath));
            //如果记录条数大于0
            if (ds.Tables[0].Rows.Count > 0)
            {
                //移除所有记录
                ds.Tables[0].Rows.Clear();
            }
            //重新写入,这时XML文件中就只剩根节点了
            ds.WriteXml(GetXmlFullPath(strXmlPath));
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
    #endregion

    #region DeleteXmlRowByIndex 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
    /// <summary>
    /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
    /// </summary>
    /// <param name="strXmlPath">XML路径</param>
    /// <param name="iDeleteRow">要删除的行在DataSet中的Index值</param>
    public static bool DeleteXmlRowByIndex(string strXmlPath, int iDeleteRow)
    {
        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml(GetXmlFullPath(strXmlPath));
            if (ds.Tables[0].Rows.Count > 0)
            {
                //删除符号条件的行
                ds.Tables[0].Rows[iDeleteRow].Delete();
            }
            ds.WriteXml(GetXmlFullPath(strXmlPath));
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
    #endregion

    #region DeleteXmlRows 删除strColumn列中值为ColumnValue的行
    /// <summary>
    /// 删除strColumn列中值为ColumnValue的行
    /// </summary>
    /// <param name="strXmlPath">xml相对路径</param>
    /// <param name="strColumn">列名</param>
    /// <param name="ColumnValue">strColumn列中值为ColumnValue的行均会被删除</param>
    /// <returns></returns>
    public static bool DeleteXmlRows(string strXmlPath, string strColumn, string[] ColumnValue)
    {
        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml(GetXmlFullPath(strXmlPath));

            //先判断行数
            if (ds.Tables[0].Rows.Count > 0)
            {
                //判断行多还是删除的值多,多的for循环放在里面
                if (ColumnValue.Length > ds.Tables[0].Rows.Count)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        for (int j = 0; j < ColumnValue.Length; j++)
                        {
                            //找到符合条件的行if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
                            {
                                //删除行
                                ds.Tables[0].Rows[i].Delete();
                            }
                        }
                    }
                }
                else
                {
                    for (int j = 0; j < ColumnValue.Length; j++)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            //找到符合条件的行if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
                            {
                                //删除行
                                ds.Tables[0].Rows[i].Delete();
                            }
                        }
                    }
                }
                ds.WriteXml(GetXmlFullPath(strXmlPath));
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }
    #endregion

    #region GetXmlFullPath 返回完整路径
    /// <summary>
    /// 返回完整路径
    /// </summary>
    /// <param name="strPath">Xml的相对路径</param>
    /// <returns>Xml的路径</returns>
    private static string GetXmlFullPath(string strPath)
    {
        //如果路径中含有:符号,则认定为传入的是完整路径 
        if (strPath.IndexOf(":") > 0)
        {
            return strPath;
        }
        else
        {
            //返回完整路径
            return System.Web.HttpContext.Current.Server.MapPath(strPath);
        }
    }
    #endregion

分享到:
评论

相关推荐

    C# DataSet读取XML

    用DataSet读取XML,在GridView中显示XML的内容。 环境: WIN XP VS2008

    C#通过DataSet读写xml文件的方法

    本文实例讲述了C#通过DataSet读写xml文件的方法。分享给大家供大家参考。具体实现方法如下: ... 您可能感兴趣的文章:C# 创建,读取,写入XML文件C#操作读取、写入XML文档的实用方法C#实现xml文件的读取与写入简单

    c#使用Dataset读取XML文件动态生成菜单的方法

    主要介绍了c#使用Dataset读取XML文件动态生成菜单的方法,涉及C#使用Dataset操作XML文件的相关技巧,需要的朋友可以参考下

    一个通过DataSet操作XML的类

    本文介绍了一个通过DataSet操作XML的类。具体介绍了基本思想及程序详解。

    C#操作XML文件方法举例,dataset转换XML

    c#修改xml,dataset和xml文件的转换

    C# Winform中Dataset操作xml的投票系统

    (最近发现有朋友评论说是公司...下载的朋友请仔细了解程序)C# 中Dataset操作xml的投票系统C# 中Dataset操作xml的投票系统C# 中Dataset操作xml的投票系统C# 中Dataset操作xml的投票系统C# 中Dataset操作xml的投票系统

    xml封装(通过DataSet来操作Xml的类)

    GetDataSetByXml //读取xml直接返回DataSet GetDataViewByXml //读取Xml返回一个经排序或筛选后的DataView WriteXmlByDataSet //向Xml文件插入一行数据 UpdateXmlRow //更改符合条件的一条Xml记录 ...

    xml字符串转化Dataset

    用C#编程实现显示XML文件中信息的方法是使用.NET提供的标准类把XML文件内容读入一个StreamReader类对象中,再用XmlDatadocument类的DataSet读XML的方法去读XML信息到DataSet中,DataSet再以DataView的方式赋给一个Web...

    使用DataSet操作XML,包含窗体震动代码

    使用DataSet简便操作XML,窗体震动具体自己看代码。很简单的,自己理解。多看。

    读取网上XML数据,绑定到DataGrid(DataSet)实例

    读取网上XML数据,绑定到DataGrid(DataSet)实例 参考了MSDN和其他一些关于类似方面的资料。 代码没有太多的技巧,也没有很好的书写习惯, 只适合做简单的参考。 做法:抓取xml文件,绑定到datagrid。

    DataSet数据导入成xml、txt、xls

    根据CSHARP 的源码修改 vb.net版 只需传入DataSet、文件名即可。具体操作还需要灵活应用 文本只需复制到自己的工程即可!!

    C# 读PI数据库,结合DATASET读写XML

    知识点: 1、读PI数据库 2、结合DATASET对XML进行读写操作 3、Time类的运用 要运行此程序须具备以下条件: 1、具有PI数据库 2、XML文件中所列的测点在PI数据库中存在 3、程序开发环境为:visual studio 2010

    xml.zip_C# xml dataset_Csharp xml_c# xml查询_xml csharp_xml文件

    该压缩包内包含几个操作Xml文件的实例. 每一种Xml文件的格式都有所不同. 支持Xml文件的查询、修改、删除节点等. 还有如何将Xml文件转换为DataSet数据集. 然后通过更新数据集来实现Xml文件的更新.

    XML操作类(已封装成类)

    每次都要用到XML保存一些配置,而每次操作XML都觉得挺麻烦,没有数据库那么顺手。后来发现用DataSet操作XML很方便,而且灵活性比较好,于是写了一个操作XML的类,用来应付一般的XML操作(源码下载附件)。

    【ASP.NET编程知识】asp.net使用DataSet的ReadXml读取XML文件及Stream流的方法.docx

    【ASP.NET编程知识】asp.net使用DataSet的ReadXml读取XML文件及Stream流的方法.docx

    xml读取成DataSet 验证重复 并导出

    C#语言编写的小工具,读取xml成DataTable,并验证数据重复性,以及数据查询 导出等功能。

    VS2005入门视频教程-096.利用DataSet操作XML.rar

    本系列教程的课程安排参考了多本.net 1.1以及在目前的2.0新书的基础上认真编订。不敢夸口本系列多了不起,但至少敢保证你看完本系列,再做完每个小结的测试,你入门是绝对没有问题的!做一个简单的网站是绝对可以的!...

    C#中DataSet的用法(很详细)

    DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合。DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存...DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作.....

Global site tag (gtag.js) - Google Analytics