Vb.net 每行的 HTMLAgilityPack 循环
Vb.net HTMLAgilityPack Loop for Each Row
从网络浏览器控件抓取时,我可以使用类似的东西:
For Each element As HtmlElement In Me.Bookie.Document.GetElementsByTagName("tr")
If element.GetAttribute("className") = "name" Then
'do whatever here
End If
Next
效果很好。
它为每个 TR 循环,如果它找到 "name" class 它会做我需要的。
尝试使用套接字和 HTMLAgilityPack 进行此操作会导致一些问题。我不能简单地使用:
SelectNodes("//tr[@class='name']")
因为敏捷包正在更改格式并删除我的换行符,因此无法进行解析。数据在那里并且它读取它但是 HTMLAgilityPack 有时会做一些与浏览器控件不同的事情。
因此,我需要为每个 tr 循环并检查每个 tr 是否存在其他 classes。他们并不总是在那里,我需要知道他们什么时候不在那里,仅仅做一个 SelectNodes("//tr[@class='otherclass']") 是不够的。我想知道TR有没有
所以我希望它在每个 tr 和 proc 中循环,如果它在那个 tr 中找到一个 classname "otherclass"。
我假设这是可能的,但我不确定语法是什么样的。
我试过变体:
For Each node As HtmlNode In SmarkDocument.DocumentNode.SelectNodes("//tr")
For Each SecondNode As HtmlNode In node.SelectNodes("//a[@class='otherclass']")
'do whatever
Next
Next
嵌套循环 我尝试使用第一个 //tr 循环中的 node.selectnodes,但它只是遍历所有 HTML。所以我假设这是我在第二个循环中的语法问题导致它查看所有 HTML 并且基本上忽略了第一个循环或第二个循环中的 xpath 的东西。
我知道 'a' 标签有区别,但浏览器不需要它,而 xpath 需要它。
我假设(并且非常希望)我可以做一些事情:
For Each node As HtmlNode In SmarkDocument.DocumentNode.SelectNodes("//tr")
If node.Element.Contains("otherclass") Then
'proc for each name
End If
Next
如果您将 For Each SecondNode As HtmlNode In node.SelectNodes("//a[@class='otherclass']")
更改为 For Each SecondNode As HtmlNode In node.SelectNodes(".//a[@class='otherclass']")
,那么您的内部 For Each
会处理后代 a
元素,而不是所有 a
元素。
从网络浏览器控件抓取时,我可以使用类似的东西:
For Each element As HtmlElement In Me.Bookie.Document.GetElementsByTagName("tr")
If element.GetAttribute("className") = "name" Then
'do whatever here
End If
Next
效果很好。
它为每个 TR 循环,如果它找到 "name" class 它会做我需要的。
尝试使用套接字和 HTMLAgilityPack 进行此操作会导致一些问题。我不能简单地使用:
SelectNodes("//tr[@class='name']")
因为敏捷包正在更改格式并删除我的换行符,因此无法进行解析。数据在那里并且它读取它但是 HTMLAgilityPack 有时会做一些与浏览器控件不同的事情。
因此,我需要为每个 tr 循环并检查每个 tr 是否存在其他 classes。他们并不总是在那里,我需要知道他们什么时候不在那里,仅仅做一个 SelectNodes("//tr[@class='otherclass']") 是不够的。我想知道TR有没有
所以我希望它在每个 tr 和 proc 中循环,如果它在那个 tr 中找到一个 classname "otherclass"。
我假设这是可能的,但我不确定语法是什么样的。
我试过变体:
For Each node As HtmlNode In SmarkDocument.DocumentNode.SelectNodes("//tr")
For Each SecondNode As HtmlNode In node.SelectNodes("//a[@class='otherclass']")
'do whatever
Next
Next
嵌套循环 我尝试使用第一个 //tr 循环中的 node.selectnodes,但它只是遍历所有 HTML。所以我假设这是我在第二个循环中的语法问题导致它查看所有 HTML 并且基本上忽略了第一个循环或第二个循环中的 xpath 的东西。
我知道 'a' 标签有区别,但浏览器不需要它,而 xpath 需要它。
我假设(并且非常希望)我可以做一些事情:
For Each node As HtmlNode In SmarkDocument.DocumentNode.SelectNodes("//tr")
If node.Element.Contains("otherclass") Then
'proc for each name
End If
Next
如果您将 For Each SecondNode As HtmlNode In node.SelectNodes("//a[@class='otherclass']")
更改为 For Each SecondNode As HtmlNode In node.SelectNodes(".//a[@class='otherclass']")
,那么您的内部 For Each
会处理后代 a
元素,而不是所有 a
元素。