테이블 행과 열을 통한 HTML 애자일 팩 반복

.net c# html-agility-pack

문제

나는 이런 식탁을 가지고있다.

<table border="0" cellpadding="0" cellspacing="0" id="table2">
    <tr>
        <th>Name
        </th>
        <th>Age
        </th>
    </tr>
        <tr>
        <td>Mario
        </td>
        <th>Age: 78
        </td>
    </tr>
            <tr>
        <td>Jane
        </td>
        <td>Age: 67
        </td>
    </tr>
            <tr>
        <td>James
        </td>
        <th>Age: 92
        </td>
    </tr>
</table>

그리고 HTML Agility Pack을 사용하여 구문 분석하려고합니다. 이 코드를 사용하지 않으려 고 시도했습니다.

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
{
    foreach (HtmlNode col in row.SelectNodes("//td"))
    { 
        Response.Write(col.InnerText); 
    }
}

내가 도대체 ​​뭘 잘못하고있는 겁니까?

수락 된 답변

나는 완전한 xpath를 제공해야했다. @Coda ( https://stackoverflow.com/a/3104048/1238850 )의 제안에서 Firebug를 사용하여 전체 xpath를 얻었으며이 코드가 완성되었습니다.

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("/html/body/table/tbody/tr/td/table[@id='table2']/tbody/tr"))
{
    HtmlNodeCollection cells = row.SelectNodes("td");
    for (int i = 0; i < cells.Count; ++i)
    {
        if (i == 0)
        { Response.Write("Person Name : " + cells[i].InnerText + "<br>"); }
        else {
            Response.Write("Other attributes are: " + cells[i].InnerText + "<br>"); 
        }
    }
}

나는 이것이 이보다 나은 방법으로 쓰여질 수 있다고 확신하지만 지금은 나를 위해 일하고있다.


인기 답변

시대가 유효하지 않은 HTML을 사용하여 정의하고 있기 때문에, 내가 코드를 실행했는데 그것은 단지 올바른지 이름 표시 : <th></td> (아마 오타).

그런데 코드를 하나의 루프로 단순화 할 수 있습니다.

foreach (var cell in doc.DocumentNode.SelectNodes("//table[@id='table2']/tr/td"))
{
    Response.Write(cell.InnerText);
}

다음은 테스트 할 때 사용한 코드입니다. http://pastebin.com/euzhUAAh



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