读取多级XML并写回单个数据库表

时间:2012-05-17 07:48:15

标签: asp.net sql xml

我是asp.net的nube。这就是我想要实现的目标。我想将以下XML数据写入sql server数据库中的单个表。

- <RaceDay RaceDayDate="2012-05-16T00:00:00" Year="2012" Month="5" Day="16" DayOfTheWeek="Wednesday" MonthLong="May" IsCurrentDay="1" IsPresaleMeeting="0" ServerTime="2012-05-16T16:47:30.033">
- <Race RaceNo="7" RaceTime="2012-05-16T16:36:00" CloseTime="2012-05-16T16:40:08.107" RaceName="F&M BM 70 HANDICAP" Distance="1200" SubFav="1" RaceDisplayStatus="PAYING" WeatherChanged="N" WeatherCond="1" WeatherDesc="Fine" TrackChanged="N" TrackCond="1" TrackDesc="Good" TrackRating="3" TrackRatingChanged="N">
- <TipsterTip TipsterId="0" Tips="1">
  <Tipster TipsterName="LATE MAIL" /> 
  </TipsterTip>
- <TipsterTip TipsterId="1" Tips="8-5-3-7">
  <Tipster TipsterName="RADIO TAB" /> 
  </TipsterTip>
- <TipsterTip TipsterId="2" Tips="1-10-9-2">
  <Tipster TipsterName="KEVIN CASEY" /> 
  </TipsterTip>
- <Pool PoolType="EX" Available="Y" Abandoned="N" PoolDisplayStatus="PAYING" PoolTotal="3734.00" JPotInGross="0.00" JPotOutGross="0.00" LastCalcTime="2012-05-16T16:36:57" CalcTime="2012-05-16T16:41:31" StatDiv="0">
- <Dividend DivId="62406790" DivAmount="80.8000">
  <DivResult LegNo="1" RunnerNo="7" /> 
  <DivResult LegNo="2" RunnerNo="5" /> 
  </Dividend>
  </Pool>
- <Pool PoolType="F4" Available="Y" Abandoned="N" PoolDisplayStatus="PAYING" PoolTotal="3492.00" JPotInGross="0.00" JPotOutGross="1397.16" LastCalcTime="2012-05-16T16:36:57" CalcTime="2012-05-16T16:41:31" StatDiv="0">
- <Dividend DivId="62406797" DivAmount="10828.0000">
  <DivResult LegNo="1" RunnerNo="7" /> 
  <DivResult LegNo="2" RunnerNo="5" /> 
  <DivResult LegNo="3" RunnerNo="13" /> 
  <DivResult LegNo="4" RunnerNo="1" /> 
  </Dividend>
  </Pool>
- <Pool PoolType="QN" Available="Y" Abandoned="N" PoolDisplayStatus="PAYING" PoolTotal="7029.00" JPotInGross="0.00" JPotOutGross="0.00" LastCalcTime="2012-05-16T16:36:57" CalcTime="2012-05-16T16:41:31" StatDiv="0">
- <Dividend DivId="62406785" DivAmount="68.5000">
  <DivResult LegNo="1" RunnerNo="5" /> 
  <DivResult LegNo="2" RunnerNo="7" /> 
  </Dividend>
  </Pool>
  </Race>
  </Meeting>
  </RaceDay>

有人可以告诉我如何读取我的xml文件并将数据展平并将其插入sql数据库中合适的表中。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在网上搜索,有很多关于您的要求的文章。试试这个:

Best way to load XML files to SQL Server using C#

Importing Large Xml Files to SQL Server Using SqlBulkCopy

答案 1 :(得分:0)

首先,您必须解析XML并将其存储到自定义C#对象中,或者您可以直接将XML传递给存储过程并在那里进行编码以将其保存到DB中。

将xml传递给存储过程并对其进行操作有点困难所以我建议在C#中解析它然后获取自定义对象。一旦你得到它,你可以做任何你想做的事。

以下是我的文章,它准确地解释了您的需求。 Read XML file in ASP.NET(C#)

下面是解析XML文件并从中生成自定义C#对象的示例代码。

public CatSubCatList GenerateCategoryListFromProductFeedXML()
{
    string path = System.Web.HttpContext.Current.Server.MapPath(_xmlFilePath);

    XDocument xDoc = XDocument.Load(path);

    XElement xElement = XElement.Parse(xDoc.ToString());


    List<Category> lstCategory = xElement.Elements("Product").Select(d => new Category
    {
        Code = Convert.ToString(d.Element("CategoryCode").Value),
        CategoryPath = d.Element("CategoryPath").Value,
        Name = GetCateOrSubCategory(d.Element("CategoryPath").Value, 0), // Category
        SubCategoryName = GetCateOrSubCategory(d.Element("CategoryPath").Value, 1) // Sub Category
    }).GroupBy(x => new { x.Code, x.SubCategoryName }).Select(x => x.First()).ToList();

    CatSubCatList catSubCatList = GetFinalCategoryListFromXML(lstCategory);

    return catSubCatList;
}