HtmlAgilityPack exemple pour changer les liens ne fonctionne pas. Comment puis-je accomplir cela?

c# html-agility-pack uri xpath

Question

L'exemple sur codeplex est le suivant:

HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

Le premier numéro est HtmlDocument. DocumentElement n'existe pas! Ce qui existe, c'est HtmlDocument. DocumentNode, mais même lorsque je l'utilise à la place, je ne peux pas accéder à l'attribut href tel que décrit. Je reçois l'erreur suivante:

HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

Voici le code que je tente de compiler lorsque j'obtiens cette erreur:

HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

MISE À JOUR: Je viens de constater que l'exemple n'avait jamais été conçu pour fonctionner ... Et j'ai une solution après avoir lu le code de l'exemple ... Je vais poster ma solution pour que d'autres personnes comme moi puissent en profiter une fois terminée.

Réponse acceptée

Voici ma solution rapide basée sur des portions de l'exemple de code inclus dans le ZIP.

private static void ChangeLinks(ref HtmlDocument doc)
        {
            if (doc == null) return;
            //process all tage with link references
            HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//*[@background or @lowsrc or @src or @href]");
            if (links == null)
                return;

            foreach (HtmlNode link in links)
            {

                if (link.Attributes["background"] != null)
                    link.Attributes["background"].Value = _newPath + link.Attributes["background"].Value;
                if (link.Attributes["href"] != null)
                    link.Attributes["href"].Value = _newPath + link.Attributes["href"].Value;(link.Attributes["href"] != null)
                    link.Attributes["lowsrc"].Value = _newPath + link.Attributes["href"].Value;
                if (link.Attributes["src"] != null)
                    link.Attributes["src"].Value = _newPath + link.Attributes["src"].Value;
            }
        }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi