ASP.NET MVC 3 Разобрать значение простого тега html / извлечь атрибут - PullRequest
4 голосов
/ 14 мая 2011

Каков наилучший способ анализа html-тега следующим образом:

<a href="/Results">Results</a>

Мне просто нужно извлечь значение href.

Мне нужно сделать это на контроллере.

Я знаю, что могу использовать linq to xml например или regex.

Есть идеи, как лучше в этом случае?

Может быть, кто-нибудь из помощников MVC готов к работе?

В основном, что мне нужно сделать:

У меня есть метод расширения, который возвращает текущий URL

public static string GetCurrentUrl(this ViewContext context)
        {
            string action = (string)context.Controller.ValueProvider.GetValue("action").RawValue;
            string controller = (string)context.Controller.ValueProvider.GetValue("controller").RawValue;

            if (action.ToLower() != "index")
                return String.Format("/{0}/{1}", controller, action);
            else if (action.ToLower() != "index" && controller.ToLower() != "home")
                return String.Format("/{0}", controller);
            else
                return "/";
        }

Мне нужно сравнить этот URL со значением от href как этот <a href="{here cold be any link}">Results</a>

Ответы [ 2 ]

4 голосов
/ 14 мая 2011

Используйте синтаксический анализатор XML и избегайте регулярных выражений.Для этого конкретного случая XDocument кажется достаточно простым:

var doc = XDocument.Parse("<a href=\"/Results\">Results</a>");
var href = doc.Element("a").Attribute("href").Value;

Для более сложных сценариев, когда требуется специальный разбор HTML и манипулирование DOM, можно использовать HTML Agility Pack .

0 голосов
/ 14 мая 2011
Общеизвестно, что синтаксический анализ

html очень много скрытых ошибок. HTML-пакет Agility , представляющий собой библиотеку HTML для синтаксического анализа .NET HTML. Fizzler включает css-селекторы для html в c # и встроен в пакет гибкости.

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