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 */