使用Asp.net C#

时间:2015-08-15 07:03:09

标签: c# asp.net xml

我使用XML来存储数据。并且有四级嵌套,如下所示

<?xml version="1.0" encoding="utf-8" ?>
<resrourceInfo>
    <month name="jan">
      <r>
         <rqstType></rqstType>
         <rsrceName></rsrceName>
         <dateRqstd></dateRqstd>
      </r>
      <r>
         <rqstType></rqstType>
         <rsrceName></rsrceName>
         <dateRqstd></dateRqstd>
      </r>
    </month>
    <month name="feb">
      <r>
         <rqstType></rqstType>
         <rsrceName></rsrceName>
         <dateRqstd></dateRqstd>
      </r>
      <r>
         <rqstType></rqstType>
         <rsrceName></rsrceName>
         <dateRqstd></dateRqstd>
      </r>
    </month>
</resourceInfo>

我想将此架构视为

  • 所有月份为表
  • 所有r为行
  • r中的所有标签为列

我已经使用了C#,如下所示

DataSet ds = new DataSet();
ds.ReadXml(HttpContext.Current.Server.MapPath("~/DB.xml"));

但它没有按预期工作。 还有其他办法吗?在此先感谢

1 个答案:

答案 0 :(得分:0)

XML未保存为DataSet。所以你可以做这样的事情

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
                    "<resrourceInfo>" +
                        "<month name=\"jan\">" +
                          "<r>" +
                             "<rqstType>1</rqstType>" +
                             "<rsrceName>2</rsrceName>" +
                             "<dateRqstd>3</dateRqstd>" +
                          "</r>" +
                          "<r>" +
                             "<rqstType>4</rqstType>" +
                             "<rsrceName>5</rsrceName>" +
                             "<dateRqstd>6</dateRqstd>" +
                          "</r>" +
                        "</month>" +
                        "<month name=\"feb\">" +
                          "<r>" +
                             "<rqstType>7</rqstType>" +
                             "<rsrceName>8</rsrceName>" +
                             "<dateRqstd>9</dateRqstd>" +
                          "</r>" +
                          "<r>" +
                             "<rqstType>10</rqstType>" +
                             "<rsrceName>11</rsrceName>" +
                             "<dateRqstd>12</dateRqstd>" +
                          "</r>" +
                        "</month>" +
                    "</resrourceInfo>";

            XDocument doc = XDocument.Parse(input);

            DataSet ds = new DataSet();

            foreach (XElement month in doc.Descendants("month"))
            {
                DataTable dt = ds.Tables.Add(month.Attribute("name").Value);
                foreach (XElement row in month.Elements("r"))
                {
                    if (dt.Rows.Count < 1)
                    {
                        foreach (XElement col in row.Elements())
                        {
                            dt.Columns.Add(col.Name.ToString(), typeof(int));

                        }
                    }
                    DataRow newRow = dt.Rows.Add();
                    foreach (XElement col in row.Elements())
                    {
                        newRow[col.Name.ToString()] = col.Value;
                    }
                }
            }

        }
    }
}
​