2012-04-05 15 views
1

私はC#/ htmlのアジリティパックでノードを設定してしばらく働いていましたが、試行錯誤を繰り返してループの対象となるノードの一覧が表示され、各ノードの子ノードがループ。私はインデックス#でそれらを参照したいと思います(最も簡単なようですが、私はここに投稿します)。私は "[0]"、 "/ [0]"、 "tr/[0]"など、xpathをフォーマットするさまざまな方法を試してきました。これまで私がこれまで持っていたことは、行:Htmlのagility pack/xpathは[index] helpで子ノードを選択してください。

protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString) 
      { 
       List<IDataPoint> earningsAnnouncements = new List<IDataPoint>(); 

       HtmlWeb hwObject = new HtmlWeb(); 
       HtmlDocument htmlDoc = hwObject.Load(AddressString); 

       if (htmlDoc.DocumentNode != null) 
       { 
        List<HtmlNode> nodeList = new List<HtmlNode>(); 

        var nodes = htmlDoc.DocumentNode.SelectNodes("html[1]/body[1]/table[4]/tr[1]/td[1]/table[1]/tr"); 

        if (nodes != null) 
        { 
         foreach (HtmlNode n in nodes) 
         { 
          if (n.OuterHtml.Contains("finance.yahoo.com")) 
            nodeList.Add(n); 
         } 
        } 

        foreach (HtmlNode node in nodeList) 
        { 
         EarningsAnnouncementDP earningsAnnouncement = new EarningsAnnouncementDP(); 

         //Error: Expression must evaluate to a node set. 
         earningsAnnouncement.Company = (node.SelectSingleNode("[0]")).InnerText.ToString(); 
         earningsAnnouncement.Ticker = node.SelectSingleNode("[1]").InnerText.ToString(); 
         earningsAnnouncement.Estimate = node.SelectSingleNode("[2]").InnerText.ToString(); 
         earningsAnnouncement.AnnouncementTime = node.SelectSingleNode("[3]").InnerText.ToString(); 

         earningsAnnouncements.Add(earningsAnnouncement); 
        } 

        return earningsAnnouncements; 
       } 
+1

なぜあなたは子ノードにアクセスするために 'ChildNodes'プロパティを使用していませんか? – Alex

+0

@Alexそれはちょうど私が探していたものです、ありがとうございます。 – StatsViaCsh

答えて

4

あなたはノードtrまで移動しました。今すぐtdノードにアクセスする必要があります。したがって、XPATHを以下のように使用することができます。

node.SelectSingleNode("./td[1]").InnerText; 
node.SelectSingleNode("td[1]").InnerText; 

も、第1 tdノードはtd[1]なくtd[0]としてアクセスされます。

アレックスが指摘したように、あなたは優れた提案である以下のようなものを書くことができます。

node.ChildNodes[0].InnerText 

HTH

+0

ありがとうございました。 – StatsViaCsh

関連する問題