C#.Net 中,如何将xml(字符串)内容读进DataSet

Jave.Lin 2010-08-09 05:27:21
string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";

类似以上的xml内容(字符串)。

怎么读进DataSet中
Demo code part 1:

            string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";
byte[] bytes = _cryptor.Encoding.GetBytes(xmlContent );

MemoryStream memoryStream = new MemoryStream();
memoryStream.Read(bytes , 0, bytes .Length);

DataSet dataSet = new DataSet();
dataSet.ReadXml(memoryStream );//这里老是提示,缺少根元素。


Demo code part 2:

            string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";

MemoryStream memoryStream = new MemoryStream();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = xmlContent ;

xmlDoc.Save(memoryStream);

DataSet dataSet = new DataSet();
dataSet.ReadXml(memoryStream );//这里老是提示,缺少根元素。




我现在在做游戏中的一些数据存取。遇到这问题。

但用文件方式的路径(path)来作参数,就没有问题。

如:
            string path=string.Format("{0}{1}",Application.StartPath,@"\Test.xml");
DataSet dataSet = new DataSet();
dataSet.ReadXml(path);//这里又没问题了。那个Test.xml的内容与上面的一样。


因为我对整个.xml文件的内容都加密了。



Help~~~~~~~~~
...全文
458 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
盜令玊 2011-10-12
  • 打赏
  • 举报
回复
遇到和LZ一样的问题 最后用XmlDocument 和 MemoryStream 解决了。仅供参考

string strRet = "<?xml version=\"1.0\" standalone=\"yes\"?><DsResultData><ReturnInfo><ReturnCode>0</ReturnCode><ReturnMessage>Success</ReturnMessage></ReturnInfo></DsResultData>";
DataSet dsRet = new DataSet();
XmlDocument doc = new XmlDocument();
MemoryStream mStream = new MemoryStream();
doc.LoadXml(strRet);
doc.Save(mStream);
mStream.Seek(0, SeekOrigin.Begin);
dsRet.ReadXml(mStream);
jeven_xiao 2010-08-24
  • 打赏
  • 举报
回复
缺少根元素
还是XML的问题呀~
myhope88 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gabrielcnmao 的回复:]
1. 首先不是_cryptor.Encoding.GetBytes,应该是_cryptor.UTF8.GetBytes
2. Dataset读取XML流要先读取其架构或者自己设置架构,然后把流重置到开始位置。你加上那三行应该就可以了。
string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";
……
[/Quote]
这个应该可行
GabrielCNMao 2010-08-24
  • 打赏
  • 举报
回复
1. 首先不是_cryptor.Encoding.GetBytes,应该是_cryptor.UTF8.GetBytes
2. Dataset读取XML流要先读取其架构或者自己设置架构,然后把流重置到开始位置。你加上那三行应该就可以了。
string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";
byte[] bytes = _cryptor.Encoding.GetBytes(xmlContent );

MemoryStream memoryStream = new MemoryStream();
memoryStream.Read(bytes , 0, bytes .Length);
DataSet dataSet = new DataSet();
memoryStream.Seek(0, SeekOrigin.Begin);
dataSet.ReadXmlSchema(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);

dataSet.ReadXml(memoryStream );
Jave.Lin 2010-08-10
  • 打赏
  • 举报
回复
Oh my god...

大家还没理解我说的意思,我的意思不是直接对.xml文件。注意:不是读文件。

认真的再看看我的题目。

是读InnerXML的值。

怎么读这个InnerXML的值读进DataSet,而且要更注意的是,该值全都是字符串而已。



最后再得重复一下,不是读文件,读文件我也会DataSet有ReadXML(string fileName)

XmlDocument也有Load(string fileName),但我不要这些,我要的是怎么读字符串(InnerXML)的值读进DataSet.
husanbo110 2010-08-10
  • 打赏
  • 举报
回复
XmlDocument doc = new XmlDocument();
doc.Load("data.xml");
XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;
nodeList = root.SelectNodes("descendant::node");
foreach (XmlNode node in nodeList)
{
//将这个点的信息写入到dataset中去
}
Ryan20082009 2010-08-10
  • 打赏
  • 举报
回复
public void xmlToXsd()
{
string file = @"D:\a\FileClass.xml";
string lastFile = @"D:\a\FileClass.xsd";
DataSet ds = new DataSet();
ds.ReadXml(file);
System.IO.StreamWriter writer1 = new System.IO.StreamWriter(lastFile);
ds.WriteXmlSchema(writer1);
writer1.Close();
}
cjh200102 2010-08-10
  • 打赏
  • 举报
回复
不错,学习了
  • 打赏
  • 举报
回复
DataSet set = new DataSet();
set.ReadXml(reader);
最方便咯
jrl5365 2010-08-10
  • 打赏
  • 举报
回复
XmlDocument node = new XmlDocument();
string filename = ImagesPath + "Xml/AdminLink.xml";
node.Load(filename);
XmlNodeReader reader = new XmlNodeReader(node);
DataSet set = new DataSet();
set.ReadXml(reader);
RepWebList.DataSource = set;
RepWebList.DataBind();
reader.Close();
周药师 2010-08-10
  • 打赏
  • 举报
回复
using System;
using System.Xml;
using System.Xml.XPath;
using System.Data;

class ReadXML
{
public static void Main()
{
string sFile = "ReadXml.xml";

//method 1
XmlDocument doc = new XmlDocument();
doc.Load(sFile);
XmlNode node = doc.DocumentElement["News"]["Content"];
Console.WriteLine(node.InnerText);

//method2
node = doc.SelectSingleNode("//Content");
Console.WriteLine(node.InnerText);

//similarly
node = doc.DocumentElement.SelectSingleNode("News/Content");
Console.WriteLine(node.InnerText);

//method 3
DataSet ds = new DataSet();
ds.ReadXml(sFile);
Console.WriteLine(ds.Tables[0].Rows[0]["Content"].ToString());

//method 4
XmlTextReader reader = new XmlTextReader(sFile);
while (reader.Read())
{
if (reader.Name == "Content")
{
Console.WriteLine("***" + reader.ReadString());
break;
}
}

reader.Close();

//method 5

XPathDocument xpdoc = new XPathDocument(sFile);
XPathNavigator xpnv = xpdoc.CreateNavigator();
xpnv.MoveToFirstChild();
xpnv.MoveToFirstChild();
xpnv.MoveToFirstChild();
xpnv.MoveToNext();xpnv.MoveToNext();xpnv.MoveToNext();
Console.WriteLine("pathnavigator:" + xpnv.Value);
}
}
whb147 2010-08-09
  • 打赏
  • 举报
回复
不是可以直接转换马?
hitlcyu19 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huqinglu123 的回复:]

引用 3 楼 wuyq11 的回复:
XML读取到dataset
ds.ReadXML
遍历XML获取数据
XmlDocument doc= new XmlDocument();
doc.Load(xmlFile);

是嘛 不是直接可以读取吗?
[/Quote]
直接读取?怎么直接读取?读取的话也要先将xml文件load进来啊 然后在读
huqinglu123 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
XML读取到dataset
ds.ReadXML
遍历XML获取数据
XmlDocument doc= new XmlDocument();
doc.Load(xmlFile);
[/Quote]
是嘛 不是直接可以读取吗?
wuyq11 2010-08-09
  • 打赏
  • 举报
回复
XML读取到dataset
ds.ReadXML
遍历XML获取数据
XmlDocument doc= new XmlDocument();
doc.Load(xmlFile);
Jave.Lin 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xzjxylophone 的回复:]
string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";


根元素 Test 应该不是这样写的吧。。。。
[/Quote]

那正确的怎么写?
xzjxylophone 2010-08-09
  • 打赏
  • 举报
回复
string xmlContent = @"<?xml version="1.0" encoding="utf-8" ?><Test></Test>";


根元素 Test 应该不是这样写的吧。。。。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧