除了使用数据集进行xml读取之外,还有其他方法吗?

时间:2014-12-09 11:08:15

标签: c# xml asp.net-mvc

我基本上只是想把xml读成赛马课。我有这个代码但是(List)rows [1]总是返回0

public List<HorseRacing> ReturnListOfHorseRacings()
    {
        string xmlData = HttpContext.Current.Server.MapPath("~/XML/top.xml");

        DataSet ds = new DataSet();
        ds.ReadXml(xmlData);
        var horseRacing = new List<HorseRacing>();
        horseRacing = (from rows in ds.Tables[0].AsEnumerable()
                       select new HorseRacing
                       {
                           name= rows[0].ToString(),
                           meetings= (List<Meeting>)rows[1],
                       }).ToList();
        return horseRacing;
    }

请帮忙。似乎数据集单元格无法接受列表。

顺便说一句,Meeting也是另一个多元素节点。

编辑:

xml看起来像这样:

<horseracing>
  <name>UK / IRE</name>
  <meetings>
    <meeting>
      <name>Doncaster</name>
       <marketgroups>
        <marketgroup>
          <name>5f Cond Stakes</name>
           <idfwmarketgroup>468262.1</idfwmarketgroup>
           <tsstart>2013-03-22T13:25:00</tsstart>
        </marketgroup>
        <marketgroup>
          <name>1m 2 1/2f Handicap</name>
          <idfwmarketgroup>468263.1</idfwmarketgroup>
          <tsstart>2013-03-22T14:00:00</tsstart>
        </marketgroup>
       </marketgroups>
     </meeting>
    <meeting>
      <name>Newbury</name>
       <marketgroups>
        <marketgroup>
          <name>2m 5f 0y Emma Lavelle Racing Maiden Hurdle</name>
           <idfwmarketgroup>468270.1</idfwmarketgroup>
           <tsstart>2013-03-22T14:10:00</tsstart>
         </marketgroup>
        <marketgroup>
           <name>2m 6f 110y Mark Polding Half Century Handicap Chase</name>
          <idfwmarketgroup>468271.1</idfwmarketgroup>
          <tsstart>2013-03-22T14:40:00</tsstart>
        </marketgroup>
      </marketgroups>
    </meeting>
  </meetings>
 </horseracing>

对不起。 编辑第二部分: 我想把xml读成一个赛马课。

1 个答案:

答案 0 :(得分:0)

您可以使用XDocument读取XML文件。 XDocument需要一个XML提要,而这需要一个字符串提要。在代码中,它看起来像这样:

XDocument coordinates = XDocument.Load (XmlReader.Create (new StringReader (File.ReadAllText (pathOfFile))));

然后,您可以使用foreach循环遍历XDocument:

foreach (var coordinate in coordinates.Descendants("document")) 
{
    string data = coordinate.Element ("object").Value;
}

“后代”用于仅搜索给定标记的子项。 “元素”用于从给定标记中获取所有数据。如果您的XML看起来像这样:

<document>
    <object>
        <id>17</id>
        <userID>128321</userID>
        <approved>1</approved>
        <reason>Test "Declined"</reason>
    </object>
    <object>
        <id>18</id>
        <userID>128321</userID>
        <approved>2</approved>
        <reason>Test "Confirmed"</reason>
    </object>
<document>

使用上述方法,您将能够使用id,userID,approved和reason值启动List或Array。

我希望这有帮助!祝你好运!

亲爱的问候, 的Björn