HtmlAgilityPack-Beispiel zum Ändern von Verknüpfungen funktioniert nicht. Wie erreiche ich das?

c# html-agility-pack uri xpath

Frage

Das Beispiel auf Codeplex ist das:

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");

Das erste Problem ist HtmlDocument. DocumentElement existiert nicht! Was existiert, ist HtmlDocument. DocumentNode, aber selbst wenn ich das stattdessen benutze, kann ich nicht wie beschrieben auf das href-Attribut zugreifen. Ich erhalte den folgenden Fehler:

Cannot apply indexing with [] to an expression of type 'HtmlAgilityPack.HtmlNode'

Hier ist der Code, den ich zu kompilieren versuche, wenn dieser Fehler auftritt:

private static void ChangeUrls(ref HtmlDocument doc)
{
    foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//@href"))
    {
        HtmlAttribute attr = link["href"];
        attr.Value = Rewriter(attr.Value);
    }
}

UPDATE: Ich habe gerade festgestellt, dass das Beispiel nie funktionieren sollte ... Und ich habe eine Lösung, nachdem ich den Beispielcode gelesen habe ... Ich werde meine Lösung für andere Leute, wie mich, veröffentlichen, sobald sie fertig sind.

Akzeptierte Antwort

Hier ist meine schnelle Lösung basierend auf Teilen des im ZIP enthaltenen Beispielcodes.

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;
            }
        }


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow