HtmlAgilityPack으로 html을 어떻게 위생 처리합니까?

c# html-agility-pack

문제

내 webscraper의 문제에 직면하고 있습니다. 본질적으로 team_a_col home 셀에 10 진수를 입력해야합니다.

<th>Med. goal subiti p/p</th>
<td class='team_a_col total'>0.76</td>
<td class='team_a_col home'>0.89
<td class='team_a_col away'>0.62</td></td>

결과는 다음과 같아야합니다 : 0.89

하지만 html 이 나쁜 구조라는 것을 알 수 있듯이 0.89 를 얻는 대신이 코드로 team_a_col away 의 내용을 team_a_col away .

node.SelectSingleNode(".//td[@class='team_a_col home']").InnerText.Trim();

어떻게하면 0.89만을 얻을 수 있습니까? </td><team_a_col away 이전이어야합니다.

수락 된 답변

HtmlDocument.FixNestedTagstrue 설정해야 true .

string html = "<th>Med. goal subiti p/p</th><td class='team_a_col total'>0.76</td><td class='team_a_col home'>0.89<td class='team_a_col away'>0.62</td></td>";

var doc = new HtmlAgilityPack.HtmlDocument
{
    OptionFixNestedTags = true,
    OptionCheckSyntax = true,
    OptionAutoCloseOnEnd = true
};
doc.LoadHtml(html);

string tdText = doc.DocumentNode.SelectSingleNode(".//td[@class='team_a_col home']")?.InnerText.Trim();

FixNestedTags 하면 결과는 다음과 FixNestedTags . 0.89


인기 답변

전체 줄을 가져 와서 부분 문자열을 가져 와서 데이터를 가져올 수 있습니까?

var node = doc.DocumentNode.SelectNodes("//htmlelment/htmlelment");

string[] nodeArray = node[0].OuterHtml.Split(' ');


Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow