【问题标题】:Looping through non-closed tags?循环通过非封闭标签?
【发布时间】:2017-04-26 01:11:14
【问题描述】:

您好,提前致谢。

我正在尝试在 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 视为包含所有其他 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 在适当的位置插入标签。它只是不更新​​。

如果您能提供任何帮助,我将不胜感激!谢谢!

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2023-03-30
      • 2017-01-20
      相关资源
      最近更新 更多