今天碰到需要把一串客户的文本文件,取出相应的数据显示出来
其实主要操作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];
}
}