直接用DataSet对象的ReadrXml()方法就行了
解决方案 »
- 存储过程调用问题
- C# datagridview问题
- popup窗口,点击按钮就是弹不出提醒窗口,哪位知道是什么问题呀?
- 关于WebBrowser编程
- 请教,在c#的方法前面加上[Transaction]的用法
- Winform控件,如何能实现这种效果,一句两句说不清,请大家进来看看。
- 如何实现自动输入{}
- 如何检索DataGridView中符合搜索条件的一行?
- 新手求教:WEB应用程序中如何获取客户端的IP地址?
- 如何获取变量名的层级结构
- json解析
- 程序运行一段时间后出现Only one usage of each socket address (protocol/network address/port) is normally permitted错误
ds.ReadXml("文件路径");
之后就可以绑定了
XmlReader reader = null;
SqlConnection conn = null;
SqlCommand cmd = null;
try
{
//此变量用判断是否从数据集读还是文件中读
bool israd = true;
conn = new SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True");
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT [EmployeeID], [City], [Title] FROM [Employees] for xml auto";
//使用三元运算符创建XmlReader对像
reader = israd ? cmd.ExecuteXmlReader() : new XmlTextReader(Request.MapPath("books.xml"));
while (reader.Read())
{
switch (reader.NodeType)
{
//是否是声明
case XmlNodeType.XmlDeclaration:
Response.Write(Server.HtmlEncode("<?xml version='1.0'?>") + "</br>");
break;
//是否是指今
case XmlNodeType.ProcessingInstruction:
Response.Write(Server.HtmlEncode("<?" + reader.Name + " " + reader.Value + "?>") + "</br>");
break;
//是否是元素
case XmlNodeType.Element:
Response.Write(Server.HtmlEncode("<")+reader.Name);
//判断某个元素是否具有属性
if (reader.HasAttributes)
{
//使用循环读出里面的所有属性
for (int i = 0; i < reader.AttributeCount; i++)
{
//使用这个方法依次移动属性
reader.MoveToAttribute(i);
Response.Write(" "+reader.Name+"=" + reader[i]);
}
}
Response.Write(Server.HtmlEncode(">")+"</br>");
break;
//是否是文本
case XmlNodeType.Text:
Response.Write(reader.Value+"</br>");
break;
//是否是注释
case XmlNodeType.Comment:
Response.Write(Server.HtmlEncode("<!--" + reader.Value + "-->") + "</br>");
break;
//是否是结束元素
case XmlNodeType.EndElement:
Response.Write(Server.HtmlEncode("</" + reader.Name + ">") + "</br>");
break;
}
}
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
finally
{
//关闭读取器
if (reader != null)
{
reader.Close();
}
//关闭数据库连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
CDATA就等同于文本数据,只是为了防止特殊字符的误解而加的标记。用InnerText属生就可以了 不过,像这种LZ的Xml文件,完全没有发挥出Xml的优势,和一般的文本文件没什么两样。
}还是不知道怎么来用?能否给出完整代码?再此表示忠心的感谢
XmlDocument类 ,XmlDataDocument类对应对应的是XML中的DOM接口你可以看看这两种类中的方法一定可以读出你的数据。
可以取到CDATA元素的数据,但不能绑定到dataset或者datatable中
1.
//responseTxt使整个xml文件的字符串
string responseTxt = Get_Http(aliay_url, 120000); XmlDocument doc = new XmlDocument();
doc.LoadXml(responseTxt);
XmlNode xmlNode = doc.SelectSingleNode("alipay/response/csv_result/csv_data"); DataSet ds=new DataSet(); //xmlNode.InnerText这个字符串就是CDATA元素的数据,他的值是:
<![CDATA[外部订单号,账户余额(元),时间,流水号,支付宝交易号,交易对方Email,交易对方,用户编号,收入(元),支出(元),交易场所,商品名称,类型,说明, ,948.00,2006年12月21日 11:08:32,61133760,2006122101685859,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,949.00,2006年12月21日 10:36:40,61133740,2006122101685855,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,950.00,2006年12月21日 10:22:50,61133710,2006122101685852,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,951.00,2006年12月21日09:25:59,61133700,2006122101685850,[email protected],陈超,2088002003057593,,-1.00,支付宝,1111,在线支付,, ,952.00,2006年12月21日 09:20:27,61133690,2006122101685849,[email protected],陈超,2088002003057593,,-1.00,淘宝,1111,在线支付,, ]]>
//然后把CDATA元素的数据的数据绑定到ds上面,但会报错,有非法字符。因为他需要是文件名的路径。而不是CDATA数据。
ds.ReadXml(xmlNode.InnerText); DataTable dt=ds1.Tables[0];
2.我可以得到整个xml文件的xmlreader,然后帮定到dataset上面
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
myReq.Timeout = timeout;
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream();
//得到xmlreader
XmlReader reader = XmlReader.Create(myStream);
DataSet ds = new DataSet();
//绑定到DataSet
ds.ReadXml(reader);
DataTable dt = ds.Tables[0];
这样不报错。但是不是我需要的数据。这样dt只有四列。根本没有 CDATA元素的数据。
我想是datatable中包含:外部订单号,账户余额(元),时间,流水号,支付宝交易号,交易对方Email,交易对方,用户编号,收入(元),支出(元),交易场所,商品名称,类型,说明 这些列,以及对应这些列的数据绑定到datatable中。有没有办法对CDATA元素数据 直接绑定到dataset上面去? 谢谢指教
//声明XmlReader对象,因为从数据读的时候返回的是这个对象,方便两种方式读取
XmlReader reader = null;
SqlConnection conn = null;
SqlCommand cmd = null;
try
{
//此变量用判断是否从数据集读还是文件中读
bool israd = true;
conn = new SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True");
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT [EmployeeID], [City], [Title] FROM [Employees] for xml auto";
//使用三元运算符创建XmlReader对像
reader = israd ? cmd.ExecuteXmlReader() : new XmlTextReader(Request.MapPath("books.xml"));
while (reader.Read())
{
switch (reader.NodeType)
{
//是否是声明
case XmlNodeType.XmlDeclaration:
Response.Write(Server.HtmlEncode("<?xml version='1.0'?>") + "</br>");
break;
//是否是指今
case XmlNodeType.ProcessingInstruction:
Response.Write(Server.HtmlEncode("<?" + reader.Name + " " + reader.Value + "?>") + "</br>");
break;
//是否是元素
case XmlNodeType.Element:
Response.Write(Server.HtmlEncode("<")+reader.Name);
//判断某个元素是否具有属性
if (reader.HasAttributes)
{
//使用循环读出里面的所有属性
for (int i = 0; i < reader.AttributeCount; i++)
{
//使用这个方法依次移动属性
reader.MoveToAttribute(i);
Response.Write(" "+reader.Name+"=" + reader[i]);
}
}
Response.Write(Server.HtmlEncode(">")+"</br>");
break;
//是否是文本
case XmlNodeType.Text:
Response.Write(reader.Value+"</br>");
break;
//是否是注释
case XmlNodeType.Comment:
Response.Write(Server.HtmlEncode("<!--" + reader.Value + "-->") + "</br>");
break;
//是否是结束元素
case XmlNodeType.EndElement:
Response.Write(Server.HtmlEncode("</" + reader.Name + ">") + "</br>");
break;
}
}
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
finally
{
//关闭读取器
if (reader != null)
{
reader.Close();
}
//关闭数据库连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
//是否是文本
case XmlNodeType.Text:
Response.Write(reader.Value+" </br>");
break;
执行到这里,reader.Value也是一个字符串:还是这个值:<![CDATA[外部订单号,账户余额(元),时间,流水号,支付宝交易号,交易对方Email,交易对方,用户编号,收入(元),支出(元),交易场所,商品名称,类型,说明, ,948.00,2006年12月21日 11:08:32,61133760,2006122101685859,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,949.00,2006年12月21日 10:36:40,61133740,2006122101685855,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,950.00,2006年12月21日 10:22:50,61133710,2006122101685852,[email protected],陈超,2088002003057593,,-1.00,支付宝,11,在线支付,, ,951.00,2006年12月21日09:25:59,61133700,2006122101685850,[email protected],陈超,2088002003057593,,-1.00,支付宝,1111,在线支付,, ,952.00,2006年12月21日 09:20:27,61133690,2006122101685849,[email protected],陈超,2088002003057593,,-1.00,淘宝,1111,在线支付,, ]]> 但是也没有办法绑定到dataset呀?有什么办法可以绑定到dataset?