The polygon.dtdx file here:
<!ELEMENT POLYGON (DESCRIPTION? POINT+)> <!ATTLIST POLYGON id CDATA #REQUIRED> <!ELEMENT DESCRIPTION (#PCDATA)> <!ELEMENT POINT> <!ATTLIST POINT x INT #REQUIRED> <!ATTLIST POINT y INT #REQUIRED> <!ATTLIST POINT z INT "0">
and the command line:
autoXml polygon.dtdx poly
generates poly.h as follows:
/* poly.h autoXml generated file */
#ifndef POLY_H
#define POLY_H
struct polyPolygon
{
struct polyPolygon *next;
char *id; /* Required */
struct polyDescription *polyDescription;
/** Optional (may be NULL). **/
struct polyPoint *polyPoint;
/** Non-empty list required. **/
};
void polyPolygonSave(struct polyPolygon *obj,
int indent, FILE *f);
/* Save polyPolygon to file. */
struct polyPolygon *polyPolygonLoad(char *fileName);
/* Load polyPolygon from file. */
struct polyDescription
{
struct polyDescription *next;
char *text;
};
void polyDescriptionSave(struct
polyDescription *obj, int indent, FILE *f);
/* Save polyDescription to file. */
struct polyDescription
*polyDescriptionLoad(char *fileName);
/* Load polyDescription from file. */
struct polyPoint
{
struct polyPoint *next;
double x; /* Required */
double y; /* Required */
double z; /* Defaults to 0 */
};
void polyPointSave(struct polyPoint *obj,
int indent, FILE *f);
/* Save polyPoint to file. */
struct polyPoint *polyPointLoad(char *fileName);
/* Load polyPoint from file. */
#endif /* POLY_H */