Как найти и заменить значения href в ссылках с помощью AngleSharp? - PullRequest
1 голос
/ 03 августа 2020

У меня есть фрагмент некоего HTML, который содержит некоторые ссылки с hrefs, начинающиеся с хэштега, например, следующего

<a href="#Getting Started">Getting Started</a>

Я новичок в AngleSharp и пытаюсь использовать его, чтобы найти эти ссылки и замените hrefs на новые значения, а затем верните обновленную разметку HTML.

1 Ответ

1 голос
/ 06 августа 2020

Прелесть AngleSharp в том, что вы можете вернуться к любому решению JS - поскольку AngleSharp предоставляет API-интерфейс W3 C DOM (который также используется JS). Все, что вам нужно сделать, это заменить определенный camelCase на PascalCase и использовать стандартные инструменты. NET вместо инструментов из JS.

Возьмем, к примеру, Как изменить все ссылки на javascript (извините, это первое попадание в мой поиск в Google) и используйте его в качестве отправной точки.

var context = BrowsingContext.New(Configuration.Default);
var document = await context.OpenAsync(res => res.Content(""));
var anchors = document.GetElementsByTagName("a");

for (var i = 0; i < anchors.Length; i++)
{
    var anchor = anchors[i] as IHtmlAnchorElement;
    anchor.Href = "http://example.com/?redirect=" + anchor.Href;
}

Таким образом, в нашем случае мы не заинтересованы в таком же преобразовании, а в довольно похожем один. Мы могли бы сделать:

for (var i = 0; i < anchors.Length; i++)
{
    var anchor = anchors[i] as IHtmlAnchorElement;

    if (anchor.GetAttribute("href")?.StartsWith("#") ?? false)
    {
        anchor.Href = "your-new-value";
    }
}

Причина в том, что Href всегда нормализован (т.е. полный URL), так что значение атрибута «#foo» может выглядеть как «http://example.com/path#foo». Глядя на значение raw , мы можем просто предположить, что значение по-прежнему начинается с символа ha sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...