.NET Framework предлагает методы для анализа строки HTML? - PullRequest
8 голосов
/ 28 февраля 2012

Зная, что я не могу использовать HTMLAgilityPack, только прямой .NET, скажем, у меня есть строка, содержащая некоторый HTML, который мне нужно анализировать и редактировать таким образом:

  • найти конкретные элементы управления в иерархии по идентификатору или по тегу
  • изменить (и в идеале создать) атрибуты этих найденных элементов

Есть ли в .net методы для этого?

Ответы [ 4 ]

5 голосов
/ 28 февраля 2012

HtmlDocument

GetElementById

HtmlElement

Вы можете создать фиктивный HTML-документ.

WebBrowser w = new WebBrowser();
w.Navigate(String.Empty);
HtmlDocument doc = w.Document;
doc.Write("<html><head></head><body><img id=\"myImage\" src=\"c:\"/><a id=\"myLink\" href=\"myUrl\"/></body></html>");
Console.WriteLine(doc.Body.Children.Count);
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src"));
Console.WriteLine(doc.GetElementById("myLink").GetAttribute("href"));
Console.ReadKey();

Вывод:

2

file: /// c:

about: myUrl

Элементы редактирования:

HtmlElement imageElement = doc.GetElementById("myImage");
string newSource = "d:";
imageElement.OuterHtml = imageElement.OuterHtml.Replace(
        "src=\"c:\"",
        "src=\"" + newSource + "\"");
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src"));

Вывод:

файл: /// d:

1 голос
/ 28 февраля 2012

Помимо HTML Agility Pack и переноса HtmlUnit на C #, звучат как твердые решения:

  • Наиболее очевидно - используйте регулярные выражения.(System.Text.RegularExpressions)
  • Использование анализатора XML.(потому что HTML - это система тегов, относящаяся к нему как к документу XML?)
  • Linq?

Одна вещь, которую я знаю, это то, что при разборе HTML, как XML, вы можете столкнуться снесколько проблем.XML и HTML не совпадают.Читайте об этом: здесь

Также здесь есть сообщение о Linq против Regex.

1 голос
/ 28 февраля 2012

Предполагая, что вы имеете дело с правильно сформированным HTML, вы можете просто рассматривать текст как документ XML.Фреймворк загружен функциями, позволяющими выполнять именно то, что вы просите.

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

0 голосов
/ 28 февраля 2012

Вы можете посмотреть, как работает HTML Agility Pack, однако это .Net. Вы можете отразить сборку и увидеть, что она использует MFC и может быть воспроизведена, если вы этого хотите, но вы ничего не сделаете, кроме как переместите сборку, не сделав ее больше .Net.

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