HTML Agility Pack игнорирует тег <br> - PullRequest
0 голосов
/ 02 октября 2019

Я написал следующий код на C # для извлечения содержимого таблицы на веб-странице (после получения разрешения на это). Это работает почти идеально, но некоторые из ячеек содержат несколько значений, таких как

 _______
|   10  |
|   11  |
|   12  |
|___13__|

Но вместо этого я получаю значение 10111213.

Вот ссылка, чтобы вы могли посмотретькод таблицы, если необходимо для дальнейшего ясного видения: ttps: //ug3.technion.ac.il/rishum/course/104031

WebClient webClient = new WebClient();
string page = webClient.DownloadString("https://ug3.technion.ac.il/rishum/course/104031");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);

List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@class='rishum-groups']")
            .Descendants("tr")
            .Skip(1)
            .Where(tr => tr.Elements("td").Count() > 1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
            .ToList();

1 Ответ

0 голосов
/ 02 октября 2019

Свойство InnerText удалит все элементы, оставив только текст. Если вы хотите сохранить элементы <br>, вы должны использовать InnerHtml. Вот пример:

var table = doc.DocumentNode.SelectSingleNode("//table[@class='rishum-groups']")
            .Descendants("tr")
            .Skip(1)
            .Where(tr => tr.Elements("td").Count() > 1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerHTML.Trim()).ToList())
            .ToList();

Если вам нужно проанализировать эти значения, вы можете использовать метод Split() в строке. Вот пример:

var myValues = myTextField.Split(new string[] { "<br>" }, StringSplitOptions.None);
...