1

我的 xml


<?xml version="1.0" encoding="utf-8" ?>
<Category>
  <Youth>

  </Youth>
  <GeneralStores>

  </GeneralStores>
  <Schools>

  </Schools>
  <Colleges>

  </Colleges>
  <GovernmentOffices>

  </GovernmentOffices>
  <Restaurants>

  </Restaurants>
  <MovieTheatres>

  </MovieTheatres>

</Category>

我需要像这样的数据表

_______________________

Category
__________
Youth
GeneralStores
Schools
Colleges
GovernmentOffices
Restaurants
MovieTheatres

我将此数据表绑定到需要数据源事件的 telrik rad 网格

这是我的 .cs 代码

protected void CategoriesRadGrid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    try
    {
        //create the DataTable that will hold the data
        DataTable CategoryDT = new DataTable("MainCategory");
        CategoryDT.Columns.Add("Category", System.Type.GetType("System.String"));
      CategoryDT.ReadXml(@"C:\Users\MyID\Documents\Visual Studio 2010\Projects\SomeName\InfoXML\XMLCategory.xml");
    }
    catch (Exception ex)
    {

    }
}
  1. 代码执行良好,数据表中没有数据。
  2. 还告诉我当文件在服务器上时如何给出文件位置?目前我正在使用文件所在的本地机器路径。
4

2 回答 2

2

使用 XmlDocument 读取您的 XML

XmlDocument doc= new XmlDocument();
doc.Load("physical path to file.xml");
// doc.LoadXml(stringXml);

DataTable dt = new DataTable();

if(doc.ChildNodes[1]!=null)
   dt.Columns.Add(doc.ChildNodes[1].Name); //Assuming you want the rood node to be the only column of the datatable

 //iterate through all the childnodes of your root i.e. Category
foreach(XmlNode node in doc.ChildNodes [1].ChildNodes )
{
  dt.Rows.Add(node.Name);
} 
于 2013-03-05T20:51:09.130 回答
0

尝试以下操作:

private static DataTable BuildDataTable(XElement x)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add(new DataColumn(x.Name.ToString()));
            foreach (var d in x.Descendants())
            {
                DataRow drow = dt.NewRow();
                drow[0] = d.Value;
                dt.Rows.Add(drow);
            }

            return dt;
        }

该方法将遍历 xml 并创建 dataTable。Xelement是 linq 的一部分,需要 .Net 框架 4。它代表一个 XML 元素。

调用方法:

//this answers your second question, 
//use Server.MapPath to find your file.
XElement x = XElement.Load(Server.MapPath(".") + @"\test.xml");

DataTable dt = BuildDataTable(x);
于 2013-03-05T20:53:53.310 回答