Pregunta

Estoy construyendo un analizador XML conforme y validado en C ++ y tratando de hacerlo liviano para usar en Pocket PC.

Al principio decidí agregar algunos "eventos". a mi analizador como lo hace SAX, informando sobre elementos, instrucciones de procesamiento, etc.

Estos eventos son tomados por una clase derivada que construye el árbol DOM del xml.

Mis dudas aparecen cuando trato de manejar principalmente entidades (que pueden contener elementos, pi y comentarios dentro si están definidas) y su resolución.

Por ejemplo, puedo crear una clase XMLEntityRef que se refiera a alguna XMLEntity definida en algún objeto XMLDocType como lo hace el analizador .NET system.xml.

Como sé, para la mayoría de los propósitos, una aplicación necesita conocer un elemento, sus contenidos, sus respectivos atributos y sus respectivos valores ... solo cadenas ... no le importa si el contenido del elemento está formado por objetos cdata , referencias de entidad y / o texto sin formato ... lo mismo se aplica a los valores de los atributos.

Entonces, mi pregunta es la siguiente: ¿Cuál es el beneficio de pasar a una aplicación cada objeto xml tal como aparece y dejar que (o una clase auxiliar) construya, por ejemplo, el valor del atributo resultante concatenando textos y resuelto referencias de entidad?

Si estoy haciendo una encuesta, responda: ¿su aplicación necesita saber acerca de las etiquetas cdata y dónde se encuentran en el archivo xml, o facilita las cosas ... desea saber el valor de contenido completo de un elemento en una cadena sin preocuparse de cómo está construido?

Saludos cordiales, Mauro H. Leggieri

¿Fue útil?

Solución

  

Estoy creando un analizador XML conforme y validado en C ++ y tratando de hacerlo liviano

No existe un analizador ligero (sin importar la validación). Para ser un analizador conforme, debe comprender todas las cosas que pueden incluirse en un subconjunto externo DTD, que es realmente un trabajo complicado. Es una lástima que la especificación XML haya terminado con toda la carga de DTD de SGML, pero ahora estamos atascados con ella.

  

¿su aplicación necesita saber acerca de las etiquetas cdata y dónde están ubicadas en el archivo xml?

Normalmente no. DOM Level 3 LS requiere que las secciones CDATA se mantengan como nodos CDATASection en el DOM de forma predeterminada, pero a casi ninguna aplicación le importa.

(Si la pregunta es sobre la aplicación my , entonces sí, porque la aplicación my es un sistema de plantillas que mantiene las secciones CDATA donde estaban. Pero aún así.

  

Mis dudas aparecen cuando trato de manejar principalmente entidades

Dios sí. Las referencias de entidades son un desastre total. Hacer que una implementación DOM los apoye de una manera que cumpla con DOM Level 3 Core / LS es muy muy complicado. Evite si es posible.

Otros consejos

generalmente xml no es ligero. Estás mejor con JSON.

Al crear un analizador no creo que deba presumir nada sobre cómo las aplicaciones consumirán el xml, sino más bien, proporcionar el nivel de datos más granular para cada nodo xml para proporcionar la máxima flexibilidad. Si bien esto puede requerir más trabajo por parte de las aplicaciones consumidoras, podrán lograr lo que necesiten. Buena suerte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top