HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
foreach (HtmlNode data in nodes)
{
// Works but not what I want
MessageBox.Show(data.InnerHtml);
// Should work ? but does not ?
MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
}
}
foreach의 초기 노드 인 HTML 결과를 구문 분석하려고하는 중입니다. 예상 한대로 작동하고 필요한 항목과 일치하는 항목이 10 개 있습니다. 내가 foreach 문에 들어가SelectSingleNode는 foreach에 잘못된 결과를 반환합니다.
I 출력은 데이터 항목의 내부 HTML은 올바른 데이터를 표시하지만 SelectSingleNode가 항상 foreach 문에서 첫 번째 항목에서 데이터를 표시합니다 I 출력 경우 는 점이다 경우 정상적인 행동이나 내가 뭔가 잘못하고있는거야? 이 문제를 해결하기 위해
는이 같은 모든 데이터 항목에 대한 foreach는 내부에 새로운 HTML을 생성했다 :HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);
// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
은 그럼 항목 데이터에 따라 올바른 얻을.
데이터를 가져 오려고 시도한 페이지가 http://maps.google.com/maps?q=consulting+loc:+US 인 경우 직접 시도하고 싶습니다.
기본적으로 회사 이름에 대한 왼쪽 열을 읽고 위 내용이 발생합니다.
그러나 데이터 노드에만 foreach 항목이 잘못 있습니까? 왜냐하면 내가 data.InnerHtml을 사용할 때 내부의 정확한 데이터를 표시하기 때문에 데이터 노드에서 하나만 선택하는 항목의 복제본이 없기 때문입니다. – Guapo
"//"로 시작하면 데이터를 검색하지 않고 데이터를 검색하고 있음을 의미합니다 .OwnerDocument. data.OwnerDocument는 모든 데이터 노드에서 동일합니다. – hvd
이제 더 이해할 수있게 설명해 주셔서 감사합니다! – Guapo