Pregunta

tengo este codigo

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

pero obtengo un error Object reference not set to an instance of an object.

El documento contiene al menos una etiqueta de anclaje? ¿Cómo compruebo si un atributo sale?

Intenté esto if link.HasAttributes("title") then y obtengo otro error.

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

Respuesta aceptada

Si HtmlAgilityPack admite este selector XPATH, puede reemplazar //a con //a[@href]

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

De lo contrario, puede utilizar la propiedad Attributes :

For Each link as HtmlNode In root.SelectNodes("//a")
    If link.Attributes.Any(Function(a) a.Name = "href") Then doSomething()
Next

Respuesta popular

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

Además, puede verificar los atributos: enlace. Atributos ["título"] si es nulo, entonces no tiene atributo. Mismo enlace. Atributos ["href"] y etc.

La propiedad link.HasAttributes muestra solo que la etiqueta tiene algún atributo, es un valor bool.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué