pourquoi HTML Agility Pack HtmlDocument.DocumentNode est nulle?
Je suis en utilisant ce code pour modifier l'attribut href d'un flux HTML.
j'ai d'abord télécharger une version complète de la page html à l'aide de ce code:(URL est l'adresse de la page web)
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse myHttpWebResponse =
(HttpWebResponse)myHttpWebRequest.GetResponse();
Stream s = myHttpWebResponse.GetResponseStream();
puis-je traiter ce:
HtmlDocument doc = new HtmlDocument();
doc.Load(s);
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("/a"))
{
string att = link.Attributes["href"].Value;
link.Attributes["href"].Value = "http://ahmadalli.somee.com/default.aspx?url=" + att;
}
doc.Save(s);
s
est le flux html.
mais j'ai une exception qui dit doc.DocumentNode
est nul!
j'ai essayé de nombreux sites, mais doc.DocumentNode
est nulle à
Ce n'
édité
Est-il en montrant une complète document HTML, ou un fragment HTML?
édité une
Et qu'est-ce que la structure de l'HTML? N'est ont une
s
ressembler?édité
Est-il en montrant une complète document HTML, ou un fragment HTML?
édité une
Et qu'est-ce que la structure de l'HTML? N'est ont une
HTML
élément? Un BODY
élément? Est-il un document valide?OriginalL'auteur ahmadali shafiee | 2012-02-04
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi.
Également voir le
HttpUtility.UrlEncode
pour être en mesure d'obtenir l'url de retour correctement. Sinon, certains paramètres dans l'url d'origine peut causer problème.Utilisation
HttpUtility.UrlDecode
pour les décoder.Object reference not set to an instance of an object.
Je l'exécuter sur une autre machine. Cela a fonctionné sans problème.
D'abord: je l'ai essayé à l'aide de ce lien il a bien fonctionné! la je l'ai essayé à l'aide de ceci et a obtenu un NullRefrenceException.
href
dans l'instruction foreach est nul!J'ai ajouté
if (href == null) continue;
dans la boucle.essayer votre nouveau code
OriginalL'auteur L.B
Essayez d'utiliser
//a
au lieu de/a
.Dans XPath, cela signifie essentiellement de me donner tous les liens dans le document, par opposition à de me donner tous les liens dans le document racine.
Mise à jour:
Le code suivant fonctionne:
Pourquoi vous sentez-vous le besoin d'utiliser
DocumentNode
à tous? Pourquoi ne pas utiliserdoc.SelectNodes
directement?SelectNodes est une méthode de DocumentNode
Pouvez-vous donner un exemple d'URL pour ce qui échoue? Ou tout simplement une structure de base de l'HTML?
Il est sans doute intéressant de noter que Google va / ne mettez temporaire de blocs sur la propriété intellectuelle si il y a un au-dessus de la normale nombre d'appels. Cela, peut être à l'origine que vous n'obtenez rien retourné à partir de goog si vous avez été en cours d'exécution le code beaucoup dans un court espace de temps. Vous devriez probablement essayer d'utiliser une autre url pour l'instant, de façon à éliminer comme un facteur.
OriginalL'auteur Cristian Lupascu
Voici votre réponse: HTML Agility Pack Référence Null.
OriginalL'auteur PraveenVenu
Essayez d'utiliser le code ci-dessous:
Je suis en utilisant HtmlAgility pack version: 1.4.0
Résolu votre problème? Si non, s'il vous plaît commentaire. D'autre marque comme réponse.
OriginalL'auteur Sunil Raj
Balise d'ancrage de référence est d'une manière incorrecte échappé à la chaîne:
Le code d'origine ne parvient pas à sélectionner les nœuds et renvoie la valeur null; ce doit être vérifié contre pour éviter d'échouer, disons, d'un document dans le cas où il n'existe pas de liens à tous (toutefois peu probable que c'est 🙂
"/a"
et@"/a"
.a fonctionné pour moi
OriginalL'auteur o.v.