htmlの敏捷性パック/ xpathの[インデックス]ヘルプで子ノードを選択してください?

c#-4.0 html-agility-pack xpath

質問

私はしばらくの間C#/ htmlのアジリティパックで設定されたノードで作業していましたが、試行錯誤を繰り返してループの各ノードの子ノードをループから抜き出したいノードのリストがあります。私はインデックス#でそれらを参照したいと思います(最も簡単なようですが、私はここに投稿します)。私は "[0]"、 "/ [0]"、 "tr / [0]"など、xpathをフォーマットするさまざまな方法を試してきました。これまで私がこれまで持っていたことは、ライン:

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;
                }

受け入れられた回答

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

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

また、最初のtdノードはtd[0]ではなくtd[0] td[1]としてアクセスされます。

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

node.ChildNodes[0].InnerText

HTH



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ