Библиотека для анализа файлов XHTML с помощью XLINQ - PullRequest
6 голосов
/ 28 января 2009

Когда я понял, что мне нужно создать индекс приблизительно для 50 страниц XHTML, который может быть добавлен / удален / переименован / перемещен в будущем, я подумал: «Нет проблем - я напишу быстрый генератор индексов с использованием LINQ для XML, поскольку XHTML определенно считается XML ".

Конечно, как только я попытался запустить его, я узнал о том факте, что XLINQ душит сущности XHTML, такие как & nbsp ;. Я обошел это с помощью следующего алгоритма:

  1. Считать файл XHTML в строку.
  2. Используйте поиск по регулярному выражению и замену в этой строке, чтобы добавить в DOCTYPE раздел, который определяет все соответствующие сущности (потому что меня волнует только атрибут title в файлах, которые я читаю, и мой выходной файл сейчас не использует никаких сущностей , он просто устанавливает их все пустыми, но я могу добавить фактические значения позже).
  3. Разбирает результат в XDocument.

Чтобы сохранить файл, я делаю наоборот:

  1. Сохранить XDocument в строку.
  2. Удалите определения сущностей.
  3. Сохранить в файл.

У меня вопрос: есть ли какие-нибудь библиотеки (особенно встроенные .Net), которые я могу использовать, чтобы читать файлы XHTML в XDocuments? Код, который я написал, выполнил свою задачу (сгенерировать текущий индекс и протестировать остальную часть программы-генератора), и я действительно предпочел бы не тратить время на его тестирование, если кто-то уже написал и протестировал то же самое.

Спасибо вам всем за ваше время,
Риа.

Редактировать: Большое вам спасибо; это работает! При сохранении XHTML мне все еще приходится выполнять небольшую обработку строк (думаю, библиотека на самом деле не была создана для этого :)), и мне пришлось немного поиграться с исходным пакетом Agility Pack, чтобы он прекратил беспорядочную вставку раздела CDATA. вокруг всех атрибутов стиля (даже если их уже было), но в этом смысл Open Source, верно?

1 Ответ

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