Html Agility Pack/ xpath 通过 [index] 选择子节点 帮忙,好吗?

Sta*_*Csh 1 xpath c#-4.0 html-agility-pack

我已经使用 C#/ html 敏捷包中的节点集工作了一段时间,通过反复试验,我有一个要循环的节点列表,从循环中获取每个节点的子节点。我想通过索引 # 来引用它们(似乎是最简单的,但我在这里发布)。我尝试了不同的方法来格式化 xpath,包括“[0]”、“/[0]”、“tr/[0]”等。这是到目前为止我所拥有的,直到第一个评论为止一切正常线:

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;
                }
Run Code Online (Sandbox Code Playgroud)

Ani*_*ari 5

你已经遍历到tr节点了。现在您应该访问td节点。所以你可以使用XPATH下面的类似方法。

node.SelectSingleNode("./td[1]").InnerText;
node.SelectSingleNode("td[1]").InnerText;
Run Code Online (Sandbox Code Playgroud)

第一个td节点也被访问为td[1]和 not td[0]

正如亚历克斯指出的,你可以写如下内容,这是一个很好的建议。

node.ChildNodes[0].InnerText
Run Code Online (Sandbox Code Playgroud)

华泰