Html 민첩성 팩을 테이블로 구문 분석

c# foreach html-agility-pack html-parsing

문제

그래서 나는 이런 HTML을 가지고있다.

<tr class="row1">
        <td class="id">123</td>
        <td class="date">2014-08-08</td>
        <td class="time">12:31:25</td>
        <td class="notes">something here</td>
</tr>
<tr class="row0">
        <td class="id">432</td>
        <td class="date">2015-02-09</td>
        <td class="time">12:22:21</td>
        <td class="notes">something here</td>
</tr>

그리고 그것은 각 고객 열에 대해서도 마찬가지입니다. 개체에 대한 각 테이블 행의 내용을 구문 분석하고 싶습니다. 몇 가지 방법을 시도했지만 제대로 작동하지 않을 수 있습니다.

이것은 내가 현재 가지고있는 것이다.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table[@id='customerlist']//tr"))
{
    Customer cust = new Customer();
    foreach (HtmlNode info in row.SelectNodes("//td"))
    {
        if (info.GetAttributeValue("class", String.Empty) == "id")
        {
            cust.ID = info.InnerText;
        }
        if (info.GetAttributeValue("class", String.Empty) == "date")
        {
            cust.DateAdded = info.InnerText;
        }
        if (info.GetAttributeValue("class", String.Empty) == "time")
        {
            cust.TimeAdded = info.InnerText;
        }
        if (info.GetAttributeValue("class", String.Empty) == "notes")
        {
            cust.Notes = info.InnerText;
        }
    }
    Console.WriteLine(cust.ID + " " + cust.TimeAdded + " " + cust.DateAdded + " " + cust.Notes);
}

각 루프 에서 테이블마지막 행에 대한 정보를 인쇄하는 지점까지 작동합니다. 나는 아주 간단한 것을 놓치고 있지만 무엇을 볼 수없는 것입니다.

또한 개체를 잘 만드는 내 방법입니다 또는 생성자를 사용하여 변수에서 개체를 만들어야합니까? 예 :

    string Notes = String.Empty;
if (info.GetAttributeValue("class", String.Empty) == "notes")
{
    Notes = info.InnerText;
}
..
Customer cust = new Customer(id, other_variables, Notes, etc);

인기 답변

XPath 쿼리가 잘못되었습니다. //td 대신 td 를 사용해야합니다.

foreach (HtmlNode info in row.SelectNodes("td"))

SelectNodes() //td 를 전달하면 문서의 모든 <td> 요소와 일치하므로 내부 루프는 4 회 대신 8 회 실행되고 마지막 4 회는 항상 Customer 객체에서 이전에 설정된 값보다 우선 적용됩니다.

XPath 예제보기



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