Я не знаю ничего встроенного, и из твоего вопроса немного двусмысленно, что именно ты ищешь. Вам нужен весь тег привязки или только URL из атрибута href?
Если у вас правильно сформированный XHtml, вы можете избежать использования XmlReader и запроса XPath, чтобы найти все теги привязки (<a>
), а затем нажать атрибут href для адреса. Поскольку это маловероятно, вам, вероятно, лучше использовать RegEx, чтобы получить то, что вы хотите.
Используя RegEx, вы можете сделать что-то вроде:
List<Uri> findUris(string message)
{
string anchorPattern = "<a[\\s]+[^>]*?href[\\s]?=[\\s\\\"\']+(?<href>.*?)[\\\"\\']+.*?>(?<fileName>[^<]+|.*?)?<\\/a>";
MatchCollection matches = Regex.Matches(message, anchorPattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled);
if (matches.Count > 0)
{
List<Uri> uris = new List<Uri>();
foreach (Match m in matches)
{
string url = m.Groups["url"].Value;
Uri testUri = null;
if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out testUri))
{
uris.Add(testUri);
}
}
return uris;
}
return null;
}
Обратите внимание, что я хотел бы проверить href, чтобы убедиться, что адрес действительно имеет смысл как действительный Uri. Вы можете устранить это, если вы не собираетесь никуда переходить по ссылке.