Для создания пользовательского обратного прокси (написанного на C++) я хочу сделать перевод URI в реальном времени в HTML-содержимое. Например, если я хочу получить доступ к ressource на http://myserver/
, используя http://my-reverse-proxy/myserver
, все абсолютные и точечные ссылки, такие как http://myserver/somecontent1.ext
или /somecontent2.ext
, необходимо изменить.Realtime URI-перевод содержимого HTML в C/C++
HTML-тег
<img src="/sample.png">
бы поэтому быть переведены на
<img src="/myserver/sample.png">
С моей точки зрения есть в подходах:
1) Использование регулярных выражений и замены строк, чтобы найти все связанные HTML-теги и их пути, используя группы захвата, и выполняют некоторую замену строк.
2) Разбирайте весь контент HTML, выполняйте некоторые преобразования в дереве разбора и хорошо печатайте результат обратно до допустимого источника HTML.
И вот в чем заключается этот вопрос: есть ли у вас какие-либо впечатления, какое решение может быть быстрее и, возможно, даже более разумным? Вы знаете рамки, которые я могу использовать, чтобы не изобретать колесо? Поскольку этот процесс следует использовать позже и для ресурсов на основе CSS и на основе XML, он не должен быть решением, зависящим от HTML.
Заранее благодарен!
Если вы планируете использовать его для CSS, ваш вариант 2 невозможен ... – FredericS
@FredericS Я могу анализировать и символизировать CSS, почему бы не работать? Используя что-то вроде [SDF] (http://www.program-transformation.org/Sdf/SdfLanguage), я даже мог понять разбор встроенного CSS в HTML-контенте. – muffel
уверен, что вы можете анализировать как CSS, так и XML, но языки вообще не похожи. У вас будет синтаксический анализатор, зависящий от CSS, зависящий от HTML и XML парсер и минимальное повторное использование кода (общая часть преобразования, скорее всего, будет вашим вариантом 1, но на определенных узлах ваших синтаксических диаграмм). – FredericS