0

しばらく前にここに投稿されたコード スニペットを見つけました。私はC#の初心者なので、ちょっと迷っています。

テーブルからすべてのセルを抽出して、次のような XML ファイルに書き込もうとしています

<?xml version="1.0" encoding="utf-8"?>
<Stats Date="11/4/2013">
  <Player Rank="1">
    <Name>P.K. Subban</Name>
    <Team>MTL</Team>
    <Pos>D</Pos>
    <GP>15</GP>
    <G>3</G>
    <A>11</A>
    <Pts>14</Pts>
    <PlusMinus>+2</PlusMinus>
    <PIM>16</PIM>
    <PP>2</PP>
    <SH>0</SH>
    <GW>0</GW>
    <OT>0</OT>
    <Shots>47</Shots>
    <ShotPctg>6.4</ShotPctg>
    <TOIPerGame>24:29</TOIPerGame>
    <ShiftsPerGame>27.3</ShiftsPerGame>
    <FOWinPctg>0.0</FOWinPctg>
  </Player>
</Stats>

私の問題は、25 行 19 列のテーブル全体をループする方法がわからないことです。テーブル全体から 1 行しか抽出できません。

これは私が持っているものです (スニペットを取得し、elementNames と Xpath を変更しました

public void ParseHtml()
        {
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(Source);


            var cells = htmlDoc.DocumentNode
                                                   .SelectNodes("//table[@class='data stats']/tbody/tr/td")
                                                   .Select(node => node.InnerText.Trim())
                                                   .ToList();

            var elementNames = new[] { "Name", "Team", "Pos", "GP", "G", "A", "Pts", "PlusMinus", "PIM", "PP", "SH", "GW", "OT", "Shots", "ShotPctg", "TOIPerGame", "ShiftsPerGame", "FOWinPctg" };
            var xmlDoc = new XElement("Stats", new XAttribute("Date", DateTime.Now.ToShortDateString()),
                    new XElement("Player", new XAttribute("Rank", cells.First()),
                        cells.Skip(1)
                             .Zip(elementNames, (Value, Name) => new XElement(Name, Value))
                             .Where(element => !String.IsNullOrEmpty(element.Value))
                    )
                );
            xmlDoc.Save("parsed.xml");
        }

私が試したこと:変更

var cells = htmlDoc.DocumentNode
.SelectNodes("//table[@class='data stats']/tbody/tr/td")
.Select(node => node.InnerText.Trim())
.ToList();

foreach (HtmlNode cells in htmlDoc.DocumentNode
    .SelectNodes("//table[@class='data stats']/tbody/tr/td")
    .Select(node => node.InnerText.Trim())
    .ToList() )
{
var elementNames....
..
...

この変更により、値が得られず、xml ノードが 2 つに減りました。誰か助けてもらえますか? 私はこれを解決するために3日間試みてきました。

編集: HTML ソース ファイル: http://www.nhl.com/ice/playerstats.htm?season=20132014&gameType=2&team=BUF&position=S&country=&status=&viewName=summary

4

1 に答える 1