htmlagilitypack从表中获取数据

时间:2013-08-28 14:51:29

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

我想要做的是从这张表中获取数据:

<div class="fliptable">
<div class="head">
    <div class="outer">
        <div class="inner">
            Information</div>
    </div>
</div>
<table class="body">
    <tbody>
        <tr>
            <td class="key" style="">
                SKU
            </td>
            <td class="right">
                SKU1<br>
                SKU2<br>
                SKU3<br>
            </td>
        </tr>
        <tr>
            <td class="key" style="">
                EAN
            </td>
            <td class="right" style="">
                EAN1<br>
                EAN2<br>
                EAN3<br>
            </td>
        </tr>
    </tbody>
</table>

我到目前为止的代码:

 Dim doc As New HtmlAgilityPack.HtmlDocument()
    doc.Load(WebBrowser1.DocumentStream)

    Try

        Dim key = doc.DocumentNode.SelectSingleNode("//div[@class='fliptable']//table[@class='body']//tr//td[@class='key']")
        RichTextBox1.AppendText(key.InnerText & vbNewLine)

        Dim right As HtmlNode = doc.DocumentNode.SelectSingleNode("//div[@class='fliptable']//table[@class='body']//tr//td[@class='right']")
        For Each p As HtmlNode In right.SelectNodes("//div[@class='fliptable']//table[@class='body']//tr//td[@class='right']//br")
            RichTextBox1.AppendText(p.PreviousSibling.InnerText.Trim() & vbNewLine)
        Next


    Catch ex As Exception

    End Try

我得到的结果是:

SKU
SKU1
SKU2
SKU3
EAN1
EAN2
EAN3

我想要的是什么:

SKU
SKU1
SKU2
SKU3
EAN
EAN1
EAN2
EAN3

但我不能让我的生活得到它的工作

1 个答案:

答案 0 :(得分:0)

这有效:

Dim bodyTable = (From tbl In doc.DocumentNode.Descendants("table")
                Where tbl.Attributes.Contains("class") AndAlso tbl.Attributes("class").Value = "body").FirstOrDefault
If bodyTable IsNot Nothing Then
    Dim allTd = bodyTable.SelectNodes("//td")
    For Each td In allTd
        For Each token In td.InnerText.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries)
            RichTextBox1.AppendText(token.Trim & Environment.NewLine)
        Next
    Next
End If