2010-09-29 21 views
5

Estoy tratando de analizar este campo, pero no puedo hacerlo funcionar. Intento actual:C# Html Agility Pack (SelectSingleNode)

var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtml; 


<h1 class="bla" id="my_name">namehere</h1> 

Error: Referencia de objeto no establecida en una instancia de un objeto.

Agradecer cualquier ayuda.

@John - Puedo asegurarme de que el HTML está cargado correctamente. Estoy tratando de leer mi nombre de Facebook con fines de aprendizaje. Aquí hay una captura de pantalla del plugin Firebug. La versión que estoy usando es 1.4.0.

http://i54.tinypic.com/kn3wo.jpg

Supongo que el problema es que nombre_perfil es un nodo secundario o algo, es por eso que no soy capaz de leerlo?

+0

¿Ha probado la depuración? ¿En qué línea falla tu código? Su código tal como está escrito funciona correctamente. –

+0

Publiqué la línea en la que falla. – josh

+0

¿Podría mostrar el código que carga su HTML? Además, ¿qué objeto de tu cadena es nulo? ¿Tienes varias etiquetas H1 con la misma identificación? ¿Qué versión de HTML Agility Pack estás usando? –

Respuesta

0

Prueba esto:

var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml; 
+0

No funciona. "La expresión debe evaluar a un conjunto de nodos". – josh

18

La razón por la que su código no funciona es porque hay JavaScript en la página que en realidad está escribiendo a cabo la etiqueta <h1 id='profile_name'>, por lo que si usted está solicitando la página de un usuario Agente (o a través de AJAX) que no ejecuta JavaScript, entonces no encontrará el elemento.

pude conseguir mi propio nombre utilizando el siguiente selector:

string name = 
    doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText; 
+0

Esto debe marcarse como una respuesta. Esto realmente me ayudó. El código generado dinámico no funciona en este dll. –

0
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText; 
0
public async Task<List<string>> GetAllTagLinkContent(string content) 
    { 


     string html = string.Format("<html><head></head><body>{0}</body></html>", content); 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     var nodes = doc.DocumentNode.SelectNodes("//[@id='my_name']"); 
     return nodes.ToList().ConvertAll(r => r.InnerText).Select(j => j).ToList(); 

    } 

Está bien con ("// a [@href]"); Puede intentarlo como se indica arriba. Ayuda útil

Cuestiones relacionadas