我使用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>
我想将此架构视为
我已经使用了C#,如下所示
DataSet ds = new DataSet();
ds.ReadXml(HttpContext.Current.Server.MapPath("~/DB.xml"));
但它没有按预期工作。 还有其他办法吗?在此先感谢
答案 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;
}
}
}
}
}
}