使用Asp.net c#在DataSet中读取4层嵌套的xml数据

本文关键字:嵌套 4层 xml 数据 读取 net Asp DataSet 使用 | 更新日期: 2023-09-27 18:08:15

我使用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内的所有标签作为Columns

我使用c#,如下所示

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

但是它没有像预期的那样工作。还有别的办法吗?

使用Asp.net c#在DataSet中读取4层嵌套的xml数据

XML未保存为数据集。所以你可以这样写

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;
                    }
                }
            }
        }
    }
}
​