C # Есть ли LINQ to HTML или какой-нибудь другой хороший API-интерфейс HTML-манипуляции?
У меня есть приложение C # WPF, которое должно потреблять данные, которые отображаются на веб-странице в виде таблицы HTML.
Получив вдохновение от этого url, я попытался использовать Linq для Xml для анализа Html-документа, но это работает только в том случае, если HTML-документ очень хорошо сформирован (и в нем нет комментариев или HTML-объектов внутри него). Мне удалось получить рабочее решение, используя эту технику, но это далеко не идеально.
Я получаю решение, предназначенное для синтаксического анализа HTML. Раньше я взломал «решения», но они хрупкие. Я после тщательного анализа синтаксического parsingа / манипулирования документом. В идеале я хотел бы что-то сделать задачу так же просто, как и от Javascript / JQuery.
- Используйте LINQ для группировки последовательности чисел без пробелов
- Как я могу разделить IEnumerable на группы IEnumerable
- Найти элемент в списке по LINQ?
- LINQ для чтения XML
- Найти все дочерние элементы управления определенного типа с помощью Enumerable.OfType () или LINQ
Кто-нибудь знает хорошую библиотеку .Net или утилиту для анализа / манипулирования HTML?
- LINQ с SQLite (linqtosql)
- Использование Linq с 2D-массивом, Select not found
- условные include в linq для объектов?
- Entity Framework: уже существует открытый DataReader, связанный с этой командой
- Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' в 'System.Collections.Generic.List
- Какова эффективность метода расширения Last () для List ?
- Как сгладить вложенные объекты с выражением linq
- Как преобразовать результаты linq в HashSet или HashedSet
Несмотря на то, что он не основан на 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:
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