Question

Je construis un analyseur XML de conformité et de validation en C ++ et j'essaie de le rendre plus léger pour une utilisation dans les ordinateurs de poche.

Au début, j'ai décidé d'ajouter des "événements". comme le fait SAX avec mon analyseur, informations sur les éléments, instructions de traitement, etc.

Ces événements sont pris par une classe dérivée qui construit l'arborescence DOM du xml.

Mes doutes apparaissent lorsque j'essaie de gérer principalement des entités (qui peuvent contenir des éléments, des pi et des commentaires à l'intérieur, si elles sont définies) et leur résolution.

Par exemple, je peux créer une classe XMLEntityRef qui fait référence à une XMLEntity définie dans un objet XMLDocType, comme le fait l'analyseur .NET system.xml.

Comme je le sais, dans la plupart des cas, une application a besoin de connaître un élément, son contenu, ses attributs respectifs et leurs valeurs respectives ... uniquement des chaînes ... cela ne sert à rien que le contenu de l'élément soit formé par des objets cdata , références à une entité et / ou texte brut ... il en va de même pour les valeurs d'attributs.

Donc, ma question est la suivante: quel est l’avantage de transmettre à une application chaque objet xml tel qu’il apparaît et de le laisser (ou à une classe auxiliaire) pour construire, par exemple, la valeur de l’attribut obtenu par concaténation de textes et résolue références d'entités?

Si je fais un sondage, veuillez répondre aux questions suivantes: votre application a-t-elle besoin de connaître les balises cdata et leur emplacement dans le fichier xml, ou si vous simplifiez les choses ... vous voulez connaître la valeur de contenu complète de un élément dans une chaîne sans se soucier de la façon dont il est construit?

Cordialement, Mauro H. Leggieri

Était-ce utile?

La solution

  

Je construis un analyseur XML conforme et en validation en C ++ et j'essaie de le rendre plus léger

Il n’existe pas d’analyseur conforme de légèreté (peu importe la validation). Pour être un analyseur conforme, vous devez comprendre tout ce qui peut figurer dans un sous-ensemble externe de DTD, ce qui est un travail fastidieux. Il est dommage que la spécification XML ait été alourdie par tous les détails de la DTD SGML, mais nous en sommes maintenant à la tâche.

  

votre application a-t-elle besoin de connaître les balises cdata et leur emplacement dans le fichier xml

Normalement non. DOM niveau 3 LS exige que les sections CDATA soient conservées en tant que nœuds CDATASection dans le DOM, mais quasiment aucune application ne s'en soucie.

(Si la question concerne mon application, alors oui, car mon application est un système de modèles qui conserve les sections CDATA là où elles se trouvaient. Mais toujours.)

  

Mes doutes apparaissent lorsque j'essaie de gérer principalement des entités

Dieu oui. Les références d'entité sont un désastre total. Faire en sorte qu'une implémentation DOM les supporte d'une manière compatible avec les DOM niveau 3 Core / LS est très compliqué. Évitez si possible.

Autres conseils

généralement xml n’est pas léger. Vous êtes mieux avec JSON.

Lors de la construction d'un analyseur syntaxique, je ne pense pas que vous devriez présumer de la manière dont les applications consomment le code XML. Vous devez plutôt fournir le niveau de données le plus détaillé possible pour chaque nœud XML afin d'offrir une flexibilité maximale. Bien que cela puisse nécessiter plus de travail de la part des applications consommatrices, ils seront en mesure d'accomplir tout ce dont ils ont besoin. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top