通过非封闭标签循环?

时间:2017-04-26 01:11:14

标签: html vb.net html-agility-pack

嗨,谢谢你。

我试图在VB.NET中使用HTMLAgilityPack来遍历表中的<td>标签集合。它们包含在<tr>标记内(自然地)。

我创建了下面的循环来根据需要访问TR和TD:

For Each tr In table.SelectNodes(".//tr")
    For Each td In tr.SelectNodes("td")
        '(Handle td's here)
    Next
Next

问题是网站的HTML在其模板中的某个特定TD上缺少结束标记。这导致在每个循环中拾取一个3个TD,因为它将第3个TD视为包含所有其他循环的无限标记。例如:

<tr>
    <td>Div 1 info</td>
    <td>Div 2 info</td>
    <td>Div 3 info
    <td>Div 4 info</td>
    <td>Div 5 info</td>
</tr>

我的问题是如何解决此问题以循环完整的TD集合?我试图检查TR.Count是否为3然后更新tr(2).InnerHTML在适当的位置插入标签。它只是不更新​​。

感谢您提供的任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

设置HtmlDocument.OptionFixNestedTags属性:

Dim html = New HtmlDocument
html.OptionFixNestedTags = True
html.LoadHtml(File.ReadAllText(htmlFile))
Dim table As HtmlNode = html.DocumentNode
For Each tr In table.SelectNodes(".//tr")
    For Each td In tr.SelectNodes("td")
        Console.WriteLine(td.InnerText.Trim())
    Next
Next