문제

HTML 민첩성 팩을 사용하여 HTML 테이블을 구문 분석하고 싶습니다. 표에서 사전 정의 된 열 데이터 만 추출하고 싶습니다.

그러나 나는 구문 분석 및 HTML 민첩성 팩을 처음 접했지만 시도해 보았지만 필요에 따라 HTML 민첩성 팩을 사용하는 방법을 모르겠습니다.

누구든지 아는 사람이라면 가능하다면 예를 들어보세요

편집하다 :

결정 열 이름의 데이터 만 추출하려면 HTML 테이블을 구문 분석 할 수 있습니까? 4 개의 열 이름, 주소, phno가 있으며 이름과 주소 데이터 만 추출하고 싶습니다.

도움이 되었습니까?

해결책

토론 포럼에 그 예가 있습니다. 여기. 테이블 답변을 보려면 약간 아래로 스크롤하십시오. 찾기 쉬운 더 나은 샘플을 제공하기를 바랍니다.

편집 : 특정 열에서 데이터를 추출하려면 먼저 <th> 원하는 열에 해당하는 태그와 인덱스를 기억합니다. 그런 다음 찾아야합니다 <td> 동일한 인덱스에 대한 태그. 열의 인덱스를 알고 있다고 가정하면 다음과 같은 작업을 수행 할 수 있습니다.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table");
foreach (var row in table.SelectNodes("//tr"))
{
    HtmlNode addressNode = row.SelectSingleNode("td[2]");
    //do something with address here
    HtmlNode phoneNode = row.SelectSingleNode("td[5]");
    // do something with phone here
}

EDIT2 : 열의 인덱스를 모른다면 이와 같은 모든 작업을 수행 할 수 있습니다. 나는 이것을 테스트하지 않았다.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
var tables = doc.DocumentNode.SelectNodes("//table");

foreach(var table in tables)
{
    int addressIndex = -1;
    int phoneIndex = -1;
    var headers = table.SelectNodes("//th");
    for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++)
    {
        if (headers[headerIndex].InnerText == "address")
        {
            addressIndex = headerIndex;
        }
        else if (headers[headerIndex].InnerText == "phone")
        {
            phoneIndex = headerIndex;
        }
    }

    if (addressIndex != -1 && phoneIndex != -1)
    {
        foreach (var row in table.SelectNodes("//tr"))
        {
            HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]");
            //do something with address here
            HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]");
            // do something with phone here
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top