html 민첩성 팩 / xpath는 [index] help로 자식 노드를 선택 하시겠습니까?

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.SelectSingleNode("./td[1]").InnerText;
node.SelectSingleNode("td[1]").InnerText;

HTH




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.