把Xml转换成DataTable

本文介绍了一种将XML格式的数据转换为DataTable的方法,并通过一个具体的示例展示了如何在ASP.NET应用程序中实现这一转换过程,以便更好地展示和处理客户数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到需要把一串客户的文本文件,取出相应的数据显示出来

其实主要操作2步即可

1. 先写一个 转换成DataTable的类 如下 XmlToData.cs

2. 写一个应用的Aspx页面,用GridView1来送显示出来。代码如下所示

 

客户的脚步代码大概如下所示

<root>
  <head>
 <clientIP>116.247.79.180</clientIP>
 <reqTime>1331135694300</reqTime>
 <resTime>1331135694300</resTime>
 <resCode>1</resCode>
 <sourceId>1</sourceId>
   </head>
   <body>
     <brandInfo>
  <brandId>3</brandId>
  <brandName>凯迪拉克</brandName>
  <brandOrderById>1</brandOrderById>
 </brandInfo>
 <brandInfo>
  <brandId>4</brandId> 
  <brandName>别克</brandName>
  <brandOrderById>2</brandOrderById>
 </brandInfo>
   </body>
</root>


开发代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;
using System.Xml;
using System.Text;

public partial class DefaultXml : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //DataTable d = XmlToData.CXmlToDataTable("XMLFile.xml");
        string strXml = GetXmlInfo3();
        DataTable d = XmlToData.CXmlToDatatTable(strXml);        
        int cc = d.Rows.Count;        
        this.GridView1.DataSource = d;
        this.GridView1.DataBind();
    }

    public string GetXmlInfo3()
    {
        StringBuilder str = new StringBuilder();
        str.AppendLine(@"<root><head><clientIP>116.247.79.180</clientIP><reqTime>1331138319691</reqTime><resTime>1331138319691</resTime><resCode>1</resCode><sourceId>1</sourceId></head><body><brandInfo><brandId>888</brandId><brandName>凯迪拉克</brandName><brandOrderById>1</brandOrderById></brandInfo><brandInfo><brandId>4</brandId><brandName>别克</brandName><brandOrderById>2</brandOrderById></brandInfo><brandInfo><brandId>4</brandId><brandName>别克</brandName><brandOrderById>21</brandOrderById></brandInfo></body></root>");
        int iBegin =  str.ToString().IndexOf(@"<body>");
        int iEnd = str.ToString().IndexOf(@"</body>");
        string temp = str.ToString().Substring(iBegin, iEnd - iBegin+7);
        return temp;

    }

    public string GetXmlInfo2()
    {
        StringBuilder str = new StringBuilder();
        str.AppendLine(@"<body>
    	<brandInfo>
		<brandId>3</brandId>
		<brandName>凯迪拉克</brandName>
		<brandOrderById>1</brandOrderById>
	</brandInfo>
	<brandInfo>
		<brandId>4</brandId>	
		<brandName>别克</brandName>
		<brandOrderById>2</brandOrderById>
	</brandInfo>
   </body>");

        return str.ToString();
    }
}

/// <summary>
/// XML形式的字符串、XML文江转换成DataSet、DataTable格式
/// 2007-08-16
/// </summary>
public class XmlToData
{
    /**/
    /// <summary>
    /// 将Xml内容字符串转换成DataSet对象
    /// </summary>
    /// <param >Xml内容字符串</param>
    /// <returns>DataSet对象</returns>
    public static DataSet CXmlToDataSet(string xmlStr)
    {
        if (!string.IsNullOrEmpty(xmlStr))
        {
            StringReader StrStream = null;
            XmlTextReader Xmlrdr = null;
            try
            {
                DataSet ds = new DataSet();
                //读取字符串中的信息
                StrStream = new StringReader(xmlStr);
                //获取StrStream中的数据
                Xmlrdr = new XmlTextReader(StrStream);
                //ds获取Xmlrdr中的数据                
                ds.ReadXml(Xmlrdr);
                return ds;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                //释放资源
                if (Xmlrdr != null)
                {
                    Xmlrdr.Close();
                    StrStream.Close();
                    StrStream.Dispose();
                }
            }
        }
        else
        {
            return null;
        }
    }
    /**/
    /// <summary>
    /// 将Xml字符串转换成DataTable对象
    /// </summary>
    /// <param >Xml字符串</param>
    /// <param >Table表索引</param>
    /// <returns>DataTable对象</returns>
    public static DataTable CXmlToDatatTable(string xmlStr, int tableIndex)
    {
        return CXmlToDataSet(xmlStr).Tables[tableIndex];
    }
    /**/
    /// <summary>
    /// 将Xml字符串转换成DataTable对象
    /// </summary>
    /// <param >Xml字符串</param>
    /// <returns>DataTable对象</returns>
    public static DataTable CXmlToDatatTable(string xmlStr)
    {
        return CXmlToDataSet(xmlStr).Tables[0];
    }
    /**/
    /// <summary>
    /// 读取Xml文件信息,并转换成DataSet对象
    /// </summary>
    /// <remarks>
    /// DataSet ds = new DataSet();
    /// ds = CXmlFileToDataSet("/XML/upload.xml");
    /// </remarks>
    /// <param >Xml文件地址</param>
    /// <returns>DataSet对象</returns>
    public static DataSet CXmlFileToDataSet(string xmlFilePath)
    {
        if (!string.IsNullOrEmpty(xmlFilePath))
        {
            string path = HttpContext.Current.Server.MapPath(xmlFilePath);
            StringReader StrStream = null;
            XmlTextReader Xmlrdr = null;
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                //根据地址加载Xml文件
                xmldoc.Load(path);
                DataSet ds = new DataSet();
                //读取文件中的字符流
                StrStream = new StringReader(xmldoc.InnerXml);
                //获取StrStream中的数据
                Xmlrdr = new XmlTextReader(StrStream);
                //ds获取Xmlrdr中的数据
                ds.ReadXml(Xmlrdr);
                return ds;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                //释放资源
                if (Xmlrdr != null)
                {
                    Xmlrdr.Close();
                    StrStream.Close();
                    StrStream.Dispose();
                }
            }
        }
        else
        {
            return null;
        }
    }
    /**/
    /// <summary>
    /// 读取Xml文件信息,并转换成DataTable对象
    /// </summary>
    /// <param >xml文江路径</param>
    /// <param >Table索引</param>
    /// <returns>DataTable对象</returns>
    public static DataTable CXmlToDataTable(string xmlFilePath, int tableIndex)
    {
        return CXmlFileToDataSet(xmlFilePath).Tables[tableIndex];
    }
    /**/
    /// <summary>
    /// 读取Xml文件信息,并转换成DataTable对象
    /// </summary>
    /// <param >xml文江路径</param>
    /// <returns>DataTable对象</returns>
    public static DataTable CXmlToDataTable(string xmlFilePath)
    {
        return CXmlFileToDataSet(xmlFilePath).Tables[0];
    }
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值