HTML Agility Pack忽略<br>标记

时间:2019-10-02 19:44:32

标签: javascript c# html web-scraping html-agility-pack

我用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 :(得分:0)

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);