Я извлекаю html-документ по URL-адресу с помощью WebClient.DownloadString(url)
, но затем очень сложно найти содержимое элемента, которое я ищу. Пока я читал, я заметил HtmlDocument
и у него были такие аккуратные вещи, как GetElementById
. Как я могу заполнить HtmlDocument
с помощью html, возвращаемого url
?
String to HtmlDocument
Ответ 1
Класс HtmlDocument
представляет собой оболочку вокруг собственного интерфейса интерфейса IHtmlDocument2
.
Вы не можете легко создать его из строки.
Вы должны использовать HTML Agility Pack.
Ответ 2
Используя Html Agility Pack как было предложено SLaks, это становится очень простым:
string html = webClient.DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNode specificNode = doc.GetElementById("nodeId");
HtmlNodeCollection nodesMatchingXPath = doc.DocumentNode.SelectNodes("x/path/nodes");
Ответ 3
Чтобы ответить на исходный вопрос:
HTMLDocument doc = new HTMLDocument();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
doc2.write(fileText);
// now use doc
Затем для преобразования обратно в строку:
doc.documentElement.outerHTML;
Ответ 4
Для тех, кто не хочет использовать пакет гибкости HTML и хочет получить HtmlDocument из строки, используя собственный .net-код, только вот хорошая статья о how для преобразования строки в HtmlDocument
Вот код для использования
public System.Windows.Forms.HtmlDocument GetHtmlDocument(string html)
{
WebBrowser browser = new WebBrowser();
browser.ScriptErrorsSuppressed = true;
browser.DocumentText = html;
browser.Document.OpenNew(true);
browser.Document.Write(html);
browser.Refresh();
return browser.Document;
}
Ответ 5
вы можете получить htmldocument:
System.Net.WebClient wc = new System.Net.WebClient();
System.IO.Stream stream = wc.OpenRead(url);
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
string s = reader.ReadToEnd();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(s);
так что у вас есть getbiyid и getbyname... но в дальнейшем вам лучше с помощью HTML Agility Pack, как было предложено. f.e вы можете сделать: doc.DocumentNode.SelectNodes(xpathselector) или регулярное выражение для анализа документа.
btw: почему не регулярное выражение?, его soo круто, если вы можете использовать его правильно... но xpath тоже очень могучий... так что "выберите свой яд"
у.е.
Ответ 6
Вы можете попробовать с OpenNew, а затем с помощью Write, но это немного странное использование этого класса. Дополнительная информация о MSDN.
Ответ 7
Как насчет:
var temp = Path.GetTempFileName();
var tempFile = temp.Replace(Path.GetExtension(temp),".html");
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(tempFile))
{
sw.Write(YourHTMLString);
}
Process.Start(new ProcessStartInfo(tempFile));