Domanda

Sto costruendo un parser XML conforme e validante in C ++ e sto provando a renderlo leggero per l'uso in Pocket PC.

All'inizio ho deciso di aggiungere alcuni "eventi" al mio parser come fa SAX, informando su elementi, istruzioni di elaborazione, ecc.

Questi eventi sono presi da una classe derivata che costruisce l'albero DOM dell'xml.

I miei dubbi appaiono quando si cerca di gestire principalmente entità (che possono contenere elementi, pi e commenti se definiti) e la loro risoluzione.

Ad esempio, posso creare una classe XMLEntityRef che fa riferimento ad alcune XMLEntity definite in alcuni oggetti XMLDocType come fa il parser system.xml di .NET.

Come so, per la maggior parte degli scopi un'applicazione deve conoscere un elemento, i suoi contenuti, i suoi rispettivi attributi e i loro rispettivi valori ... solo stringhe ... non importa se il contenuto dell'elemento è formato da oggetti cdata , riferimenti alle entità e / o testo semplice ... lo stesso vale per i valori degli attributi.

Quindi, la mia domanda è la seguente: qual è il vantaggio di passare a un'applicazione ogni oggetto xml così come appare e lasciare che (o una classe di supporto) costruisca, per esempio, il valore dell'attributo risultante concatenando testi e risolto riferimenti di entità?

Se sto effettuando un sondaggio, rispondi: la tua applicazione deve conoscere i tag cdata e dove si trovano nel file xml, o rendi le cose facili ... vuoi conoscere il valore completo del contenuto di un elemento in una stringa senza preoccuparsi di come viene costruito?

Cordiali saluti, Mauro H. Leggieri

È stato utile?

Soluzione

  

Sto costruendo un parser XML conforme e validante in C ++ e sto cercando di renderlo leggero

Non esiste un parser leggero (conforme alle convalide). Per essere un parser conforme devi capire tutte le cose che possono andare in un sottoinsieme esterno DTD, che è davvero un lavoro nodoso. È un peccato che le specifiche XML siano state appesantite da tutto il greggio SGML DTD, ma ora ne siamo bloccati.

  

la tua applicazione deve conoscere i tag cdata e dove si trovano nel file xml

Normalmente no. DOM Level 3 LS richiede che le sezioni CDATA siano mantenute come nodi CDATASection nel DOM per impostazione predefinita, ma quasi nessuna applicazione se ne frega.

(Se la domanda riguarda la mia applicazione , allora sì, perché la mia applicazione è un sistema di template che mantiene le sezioni CDATA dov'erano. Ma comunque.)

  

I miei dubbi appaiono quando si tenta di gestire principalmente entità

Dio sì. I riferimenti alle entità sono un disastro totale. Realizzare un'implementazione DOM supportarli in un modo conforme a DOM Level 3 Core / LS è molto complicato. Evita se possibile.

Altri suggerimenti

generalmente xml non è leggero. Stai meglio con JSON.

Quando si crea un parser, non penso che si debba presumere nulla su come le applicazioni consumeranno l'xml, piuttosto fornire il livello più granulare di dati per ciascun nodo xml per offrire la massima flessibilità. Sebbene ciò possa richiedere più lavoro da parte del consumo di applicazioni, saranno in grado di realizzare tutto ciò di cui hanno bisogno. In bocca al lupo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top