Пример HtmlAgilityPack для изменения ссылок не работает.Как мне этого добиться?

StackOverflow https://stackoverflow.com/questions/1517804

Вопрос

Пример на codeplex ( кодовый комплекс ) неужели это :

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

Первая проблема - HTMLDocument.documentElement Элемент документа не существует!Что действительно существует, так это HTMLDocument.DocumentNode ( Код документа ) но даже когда я использую это вместо этого, я не могу получить доступ к атрибуту href, как описано.Я получаю следующую ошибку:

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

Вот код, который я пытаюсь скомпилировать, когда получаю эту ошибку:

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

Обновить: Я только что обнаружил, что пример никогда не должен был работать ... И у меня есть решение после прочтения кода примера...Я опубликую свое решение, чтобы другие люди, подобные мне, могли им насладиться после завершения.

Это было полезно?

Решение

Вот мое быстрое решение, основанное на фрагментах примера кода, включенного в 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;
            }
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top