получение <a>тегов и атрибутов с помощью htmlagilitypack с vb.net - PullRequest
1 голос
/ 06 июня 2011

у меня есть этот код

Dim htmldoc As HtmlDocument = New HtmlDocument()
htmldoc.LoadHtml(strPageContent)
Dim root As HtmlNode = htmldoc.DocumentNode

For Each link As HtmlNode In root.SelectNodes("//a")
    If link.HasAttributes("href") Then doSomething() 'this doesn't work because hasAttributes only checks whether an element has attributes or not
Next

но получаю ошибку Object reference not set to an instance of an object.

документ содержит хотя бы один тег-якорь? Как я могу проверить, если атрибут выходит?

Я попробовал это if link.HasAttributes("title") then и получил еще одну ошибку

Public ReadOnly Property HasAttributes() As Boolean' has no parameters and its return type cannot be indexed.

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Если HtmlAgilityPack поддерживает этот селектор XPATH, вы можете заменить //a на //a[@href]

For Each link as HtmlNode In root.SelectNodes("//a[@href]")
    doSomething()
Next

В противном случае вы можете использовать свойство Attributes:

For Each link as HtmlNode In root.SelectNodes("//a")
    If link.Attributes.Any(Function(a) a.Name = "href") Then doSomething()
Next
0 голосов
/ 08 июня 2011
Dim htmldoc As HtmlDocument = New HtmlDocument()
htmldoc.LoadHtml(strPageContent)
Dim root As HtmlNode = htmldoc.DocumentNode

var nodes = root.SelectNodes("//a[@href and @title]")
if (nodes <> Null) Then
    For Each link As HtmlNode In nodes
        If link.HasAttributes("href") Then doSomething() 'this doesn't work because hasAttributes only checks whether an element has attributes or not
    Next
end if

Также вы можете проверить атрибуты: link.Attributes ["title"], если ноль, то не имеет атрибута. Та же ссылка. Атрибуты ["href"] и т. Д.

Свойство link.HasAttributes показывает только, что тег имеет какой-либо атрибут, это значение bool.

...