111,130
社区成员
发帖
与我相关
我的任务
分享<?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>
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();
}
}
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();
}
}
}
/// <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();
}
}
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);
}
public void test()
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("xml文件地址"));
GridView1.DataSource=ds;
GridView1.DataBind();
}