Pour le développement d'un proxy inverse personnalisé (écrit en C++), je souhaite effectuer une traduction en temps réel des URI dans le contenu HTML. Par exemple, si je veux accéder à une ressource sur http://myserver/
en utilisant http://my-reverse-proxy/myserver
, tous les liens absolus et supérieurs tels que http://myserver/somecontent1.ext
ou /somecontent2.ext
doivent être modifiés.Traduction en temps réel du contenu HTML en C/C++
Une balise HTML
<img src="/sample.png">
serait donc traduit à
<img src="/myserver/sample.png">
De mon point de vue, il y a des approches:
1) Utilisation d'expressions régulières et remplacement de chaîne pour trouver toutes les balises HTML associées et leurs chemins à l'aide de groupes de capture et de remplacement de chaîne.
2) Analyser tout le contenu HTML, faire une transformation dans l'arbre d'analyse et réimprimer le résultat dans une ressource HTML valide.
Et c'est ce que cette question est tout: Avez-vous des expériences quelle solution pourrait être plus rapide et peut-être même plus raisonnable? Connaissez-vous un cadre que je pourrais utiliser pour ne pas réinventer la roue? Comme ce processus devrait être utilisé plus tard pour les ressources CSS et XML, il ne devrait pas s'agir d'une solution dépendant du HTML.
Merci d'avance!
Si vous envisagez de l'utiliser pour CSS, votre option 2 n'est pas possible ... – FredericS
@FredericS Je pourrais analyser et tokenize CSS, pourquoi cela ne fonctionnerait-il pas? En utilisant quelque chose comme [SDF] (http://www.program-transformation.org/Sdf/SdfLanguage), je pourrais même réaliser l'analyse de CSS en ligne dans du contenu HTML. – muffel
que vous pouvez analyser à la fois CSS et XML, mais les langues ne sont pas du tout similaires. Vous aurez un analyseur CSS-dépendant, un analyseur HTML/XML-dépendant et une réutilisation de code minimale (la partie de transformation commune sera probablement votre option 1 mais sur des noeuds spécifiques de vos arborescences) – FredericS