C#读xml文件问题(在线等)

cd0425 2008-12-05 10:32:44
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Header CtnrOwner="WINS" EdiType="PRECTN"/>
<Table id="Table1" rowOrder="0">
<ID>1</ID>
<JieDian>1</JieDian>
<Name>采购管理</Name>
<Url />
<fjd>0</fjd>
<RValue>20</RValue>
</Table>
<Table id="Table2" rowOrder="1">
<ID>2</ID>
<JieDian>2</JieDian>
<Name>基本管理</Name>
<Url />
<fjd>0</fjd>
<RValue>21</RValue>

象上面这种格式的xml 用c#读出来 每个xml有的table数不一样 以每个table为一条数据, 请问各位大哥怎么样用c#读出来
</Table></NewDataSet>
...全文
240 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
net5i 2008-12-05
  • 打赏
  • 举报
回复
搂主这个XML直接可以用DataSet的ReadXml方法读入到DataSet中
然后,在检索的时候,可以直接使用:DataSet.Tables来访问里面的表

如果搂主想自己通过XmlDocument类读取这个XML,搂主可以参考我在下面回的贴:
http://topic.csdn.net/u/20081203/14/1daf422c-0266-4812-8364-eaa10000ee2b.html
bo3235 2008-12-05
  • 打赏
  • 举报
回复
再补充下:



using System.IO;
using System.Xml;


string FileName = Path.GetDirectoryName(Application.ExecutablePath) + "\\Setting.xml";//Winform的表述 ASP。net 为 doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "Setting.xml");
XmlReader reader = null;
try
{
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
XmlElement root = doc.DocumentElement;
XmlNodeList xnl = root.SelectNodes("/NewDataSet/Table");
foreach (XmlNode xn in xnl)
{
MessageBox.Show(xn.SelectNodes("ID")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("JieDian")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Name")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Url")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("fjd")[0].InnerText.ToString());//Winform的表述
}
}
finally
{
if (reader != null)
{
reader.Close();
}
}


yilanwuyu123 2008-12-05
  • 打赏
  • 举报
回复
查查MSDN
bo3235 2008-12-05
  • 打赏
  • 举报
回复
建议您使用XPath用法,以下供参考,测试也通过

string FileName = Path.GetDirectoryName(Application.ExecutablePath) + "\\Setting.xml";//Winform的表述 ASP。net 为 doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "Setting.xml");
XmlReader reader = null;
try
{
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
XmlElement root = doc.DocumentElement;
XmlNode xn = root.SelectNodes("/NewDataSet/Table")[0];//Table1
MessageBox.Show(xn.SelectNodes("ID")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("JieDian")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Name")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Url")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("fjd")[0].InnerText.ToString());//Winform的表述
xn = root.SelectNodes("/NewDataSet/Table")[1];//Table2
MessageBox.Show(xn.SelectNodes("ID")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("JieDian")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Name")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("Url")[0].InnerText.ToString());//Winform的表述
MessageBox.Show(xn.SelectNodes("fjd")[0].InnerText.ToString());//Winform的表述
}
finally
{
if (reader != null)
{
reader.Close();
}
}
}
niitnanfeng 2008-12-05
  • 打赏
  • 举报
回复
还是查msdn帮助最清楚。
wb186 2008-12-05
  • 打赏
  • 举报
回复
好好学习一下!!1
Tiger_ldy 2008-12-05
  • 打赏
  • 举报
回复

/// <summary>
/// 将xml中的数据转换成DataSet
/// </summary>
/// <param name="xmlData"></param>
/// <returns></returns>
public DataSet ConvertXMLToDataSet(string xmlData)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
DataSet xmlDS = new DataSet();
stream = new StringReader(xmlData);
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
return xmlDS;
}
catch (Exception ex)
{
string strTest = ex.Message;
return null;
}
finally
{
if (reader != null)
reader.Close();
}
}
enihs 2008-12-05
  • 打赏
  • 举报
回复
using System.Xml;

public class XmlParse
{
private string m_fileName;
private XmlDocument m_doc = new XmlDocument();

public string FileName
{
get { return m_fileName; }
set { m_fileName = value; }
}

//初始化该类的时候用完全文件名,包括路径
public XmlParse(string filename)
{
m_fileName = filename;
m_doc.Load(filename);
}

//返回某节点的list,s为xpath,例在你的例子中要寻找所有的table 就用"NewDataSet/Table"
public List<XmlNode> GetInfos(string s)
{
List<XmlNode> list = new List<XmlNode>();
foreach (XmlNode node in m_doc.SelectNodes(s))
{
list.Add(node);
}
return list;
}
}


调用例子:

XmlParse m_parse = new XmlParse("文件名");
List<XmlNode> m_listNode = m_parse.GetInfos(@"NewDataSet/Table");
//假设每个table节点里面的所有节点组合为一个对象A
List<A> list = new List<A>();
foreach(XmlNode node in m_listNode)
{

A a = new A();
a.ID = node.ChildNodes[0].InnerText.trim();
a.JieDian = node.ChildNodes[0].InnerText.trim();
...
list.Add(a);
}


list里面就是你的table对象的集合了。
雾霾人生 2008-12-05
  • 打赏
  • 举报
回复
没有必要通过Xml语句一句一句的读取,只要使用序列化技术就行了,会自动生成Xml格式文件的。
你可以使用这些属性类:
Serializable 使一个类可以序列化;
XmlElement 将属性或字段序列化为Xml的Element,可以指定Xml中的名称;
XmlAttribute 将属性或字段序列化为Xml的Attribute,可以指定Xml中的名称;
可以使用XmlSerializer类将要序列化的类写入Xml文件或从Xml文件中读取。
hztltgg 2008-12-05
  • 打赏
  • 举报
回复
xml本身有流的方式和节点的方式可以读,现在用linq也可以读,具体要根据需求来的吧,你看看msdn帮助先把。
tianshangfei 2008-12-05
  • 打赏
  • 举报
回复
oo
zpcoder 2008-12-05
  • 打赏
  • 举报
回复
    public void test()
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("xml文件地址"));

GridView1.DataSource=ds;
GridView1.DataBind();
}
basaka1982 2008-12-05
  • 打赏
  • 举报
回复
做个记号先

111,131

社区成员

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

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

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