C # Есть ли LINQ to HTML или какой-нибудь другой хороший API-интерфейс HTML-манипуляции?

У меня есть приложение C # WPF, которое должно потреблять данные, которые отображаются на веб-странице в виде таблицы HTML.

Получив вдохновение от этого url, я попытался использовать Linq для Xml для анализа Html-документа, но это работает только в том случае, если HTML-документ очень хорошо сформирован (и в нем нет комментариев или HTML-объектов внутри него). Мне удалось получить рабочее решение, используя эту технику, но это далеко не идеально.

Я получаю решение, предназначенное для синтаксического анализа HTML. Раньше я взломал «решения», но они хрупкие. Я после тщательного анализа синтаксического parsingа / манипулирования документом. В идеале я хотел бы что-то сделать задачу так же просто, как и от Javascript / JQuery.

Кто-нибудь знает хорошую библиотеку .Net или утилиту для анализа / манипулирования HTML?

Несмотря на то, что он не основан на LINQ, Я предлагаю исследовать пакет Agility Pack от CodePlex.

Примечание. Html Agility Pack теперь поддерживает Linq для объектов (через интерфейс LINQ to Xml Like)

На странице HTML Agility Pack:

Это гибкий HTML-синтаксический анализатор, который создает DOM для чтения / записи и поддерживает простой XPATH или XSLT (на самом деле не нужно понимать XPATH и XSLT, чтобы использовать его, не волнуйтесь …). Это библиотека .NET-кода, которая позволяет анализировать HTML-файлы вне Интернета. Парсер очень толерантен с искаженным HTML-кодом «реального мира». Объектная модель очень похожа на то, что предлагает System.Xml, но для HTML-документов (или streamов).

Здесь есть библиотека LINQ to HTML:

http://www.superstarcoders.com/linq-to-html.aspx

HTML редко достаточно хорошо сформирован, чтобы вы могли надежно использовать LINQ to XML. Вполне возможно, что вы можете найти HTML-файл «Cleaner», который мог бы правильно форматировать, чтобы его можно было прочитать, но не сказано, насколько он будет надежным.

Я предполагаю, что это «screencraper», который читается из таблицы HTML, над которой у вас нет контроля. Не подчеркивайте прочность в этом случае, скрипинг экрана по своей сути является хрупким. Если ваши требования установлены на камне, спроектируйте скребок, чтобы его можно было легко обновлять, если / когда HTML вы очищаете изменения.

Я должен был сделать это в недавнем проекте, и я использовал LINQ to XML. Если вы знаете, что это всегда будет чистый XHTML, вы можете, вероятно, рекурсивно скопировать DOM довольно легко, но я использовал библиотеку classов DevComponents HTMLDocument ( http://www.devcomponents.com/htmldoc/ ) для преобразования HTML в XML, а затем вытащил что в XElement. Это уменьшает задачу получения HTML в иерархии XElement. Единственное предостережение в том, что он задыхается от элементов сценария, поэтому я удалил их грубой силой.

///  /// Extracts an HtmlDocument DOM to an XElement DOM that can be queried using LINQ to XML. ///  /// HtmlDocument containing DOM of page to extract. /// HTML content as  for consumption by LINQ to XML. public XElement ExtractXml(HtmlDocument htmlDocument) { XmlDocument xmlDoc = htmlDocument.ToXMLDocument(); // Find and remove all script tags from XML DOM or LINQ to XML will choke on XElement.Parse(XmlDocument). IList nodes = new List(); foreach (XmlNode node in xmlDoc.GetElementsByTagName("script")) nodes.Add(node); foreach (XmlNode node in nodes) node.ParentNode.RemoveChild(node); return XElement.Parse(xmlDoc.OuterXml); } 

Я разместил код, предоставляющий функции «LINQ to HTML» здесь:

Поиск парсера C # HTML

  • NHibernate Как мне запросить свойство IList ?
  • Выберите выделение, используя linq
  • Сильно типизированная динамическая сортировка Linq
  • Состав и группа LINQ по периодам времени
  • Используйте собственный IComparer с Linq OrderBy
  • LINQ для сущностей - создание где предложения для проверки коллекций в отношениях от многих до многих
  • Операция не может быть завершена, поскольку DbContext был удален с использованием MVC 4
  • Создание динамических запросов LINQ на основе значения Combobox
  • Как использовать LINQ в C ++ / CLI - в VS 2010 / .Net 4.0
  • Устранение методов расширения / неопределенность LINQ
  • Как сегментировать элементы, переработанные в цикле foreach
  • Давайте будем гением компьютера.