18 #define realpath( a, b ) GetFullPathName( a, PATH_MAX, b, NULL )
19 #define strtoll _strtoi64
20 typedef SSIZE_T ssize_t;
25 #include "xDataTOM_importXML_private.h"
27 #if defined __cplusplus
52 static int xDataXML_setFileName( statusMessageReporting *smr, xDataXML_document *doc,
char const *fileName );
59 static int xDataXML_constructTOM( statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *element );
67 xDataTOM_TOM *TOM = NULL;
68 xDataXML_document *XML = NULL;
69 xDataXML_element *element;
96 ssize_t count,
n =
sizeof(
buffer ) - 1;
98 xDataXML_document *doc;
102 f = open( fileName, O_RDONLY );
105 smr_setReportError2( smr,
xDataTOM_smrLibraryID, xDataXML_errFileError,
"could not open XML file %s", fileName ); }
107 while( ( count = read( f, buffer, n ) ) > 0 ) {
115 if( count < 0 ) smr_setReportError2( smr,
xDataTOM_smrLibraryID, xDataXML_errFileError,
"read failed with errno = %d for XML %s",
132 xDataXML_document *doc;
134 if( ( doc = (xDataXML_document *) smr_malloc2( smr,
sizeof( xDataXML_document ), 1,
"xDataXML_document" ) ) != NULL ) {
144 doc->status = xDataXML_statusParsing;
145 doc->error = xDataXML_errNone;
146 doc->err = XML_ERROR_NONE;
149 doc->fileName = NULL;
150 doc->realFileName = NULL;
154 smr_setReportError2p( smr,
xDataTOM_smrLibraryID, xDataXML_errXML_ParserCreate,
"XML_ParserCreate failed" ); }
158 doc->currentRoot = &(doc->root);
169 if( doc->xmlParser ) {
173 if(
smr_isOk( smr ) && (
XML_Parse( doc->xmlParser, NULL, 0, 1 ) == XML_STATUS_ERROR ) ) {
174 doc->status = xDataXML_statusError;
176 "status = %d\nXML_Error code = %d\nXML_ErrorString = %s\nerror line, column = %d, %d", xDataXML_errXMLParser,
177 doc->err,
XML_ErrorString( doc->err ), doc->err_line, doc->err_column );
180 doc->xmlParser = NULL;
181 if( doc->status != xDataXML_statusError ) doc->status = xDataXML_statusCompleted;
203 xDataXML_element *next;
205 for( ; element != NULL; element = next ) {
206 next = element->next;
217 element->childrenRoot.children = (xDataXML_element *)
xDataXML_freeElement( smr, element->childrenRoot.children );
219 if( ( !strcmp( element->name,
"xData" ) ) && ( element->xDataTypeInfo.release != NULL ) ) element->xDataTypeInfo.release( smr, &(element->xDataTypeInfo) );
222 if( element->attributes.attributes )
smr_freeMemory( (
void **) &(element->attributes.attributes) );
223 if( element->text.text )
smr_freeMemory( (
void **) &(element->text.text) );
230 if( doc->status != xDataXML_statusParsing )
return( doc->status );
231 if(
XML_Parse( doc->xmlParser, s, (
int) strlen( s ), 0 ) == XML_STATUS_ERROR )
return( -1 );
239 xDataXML_document *doc = (xDataXML_document *) userData;
249 xDataXML_document *doc = (xDataXML_document *) userData;
251 doc->currentRoot->currentChild = NULL;
252 doc->currentRoot = doc->currentRoot->parentRoot;
261 xDataXML_document *doc = (xDataXML_document *) userData;
262 xDataXML_text *text = &(doc->currentRoot->parentRoot->currentChild->text);
263 size_t needSize = text->length + len + 1, l;
267 if( needSize < 8 ) needSize = 8;
268 if( needSize > text->allocated ) {
269 if( text->allocated != 0 ) {
270 l = ( 20 * text->allocated ) / 100;
271 if( l < 100 ) l = 100;
272 if( needSize < ( text->allocated + l ) ) needSize = text->allocated + l;
274 text->allocated = needSize;
275 text->text = (
char *) smr_realloc2( doc->smr, text->text, text->allocated,
"text" );
278 p = &(text->text[text->length]);
279 strncpy( p, s, len );
289 re->parentElement = parentElement;
290 re->parentRoot = NULL;
291 if( parentElement != NULL ) re->parentRoot = parentElement->parentRoot;
293 re->numberOfElements = 0;
295 re->currentChild = NULL;
313 xDataXML_document *doc = parentRoot->xData_doc;
314 xDataXML_element *element;
315 int i,
n, status = 1;
318 char const **pAttris;
319 xDataXML_attribute *
a;
322 element = (xDataXML_element *) smr_malloc2( doc->smr,
sizeof( xDataXML_element ), 1,
"xDataXML_element" );
323 if( element == NULL )
return( 1 );
325 element->ordinal = parentRoot->numberOfElements;
327 element->accessed = 0;
328 element->parentRoot = parentRoot;
330 element->next = NULL;
331 if( ( element->name = (
char *) smr_malloc2( doc->smr, strlen( name ) + 1, 0,
"name" ) ) == NULL ) {
335 strcpy( element->name, name );
341 for( i = 0, lens = 0, pAttris = attris; *pAttris; i++, pAttris++ ) lens += strlen( *pAttris ) + 1;
343 element->attributes.size = n *
sizeof( xDataXML_attribute ) + lens;
344 element->attributes.number =
n;
345 element->attributes.attributes = NULL;
347 if( element->attributes.size ) {
348 if( ( element->attributes.attributes = (xDataXML_attribute *) smr_malloc2( doc->smr, element->attributes.size, 0,
"attributes") ) == NULL ) {
351 a = element->attributes.attributes;
352 p = (
char *) &(element->attributes.attributes[n]);
353 for( i = 0, pAttris = attris; ( i <
n ) && status; i++, a++, pAttris++ ) {
354 lens = strlen( *pAttris ) + 1;
356 strcpy( p, *pAttris );
359 lens = strlen( *pAttris ) + 1;
361 strcpy( p, *pAttris );
363 if( !strcmp(
"index", a->name ) ) {
364 element->index = (int) strtoll( a->value, &e, 10 );
367 smr_setReportError3( doc->smr, smrUser,
xDataTOM_smrLibraryID, -1,
"could not convert index attribute = %s to integer", a->value );
381 element->textOffset = 0;
383 if( parentRoot->parentElement != NULL ) element->textOffset = parentRoot->parentElement->text.length;
384 if( parentRoot->currentChild == NULL ) {
385 parentRoot->children = element; }
387 parentRoot->currentChild->next = element;
389 parentRoot->numberOfElements++;
390 parentRoot->currentChild = element;
391 doc->currentRoot = &(element->childrenRoot);
401 return( xDataXML_errNone );
408 return( doc->status == xDataXML_statusError );
421 item->parentElement = element;
423 if( item->element == NULL ) {
424 item->mode = xDataXML_itemModeText;
425 if( element->text.length == 0 ) item->mode = xDataXML_itemModeEnd; }
427 item->mode = xDataXML_itemModeElement;
428 if( 0 < item->element->textOffset ) item->mode = xDataXML_itemModeText;
430 item->textOffset = 0;
431 item->textLength = element->text.length;
432 if( item->element != NULL ) item->textLength = item->element->textOffset;
433 item->text = element->text.text;
434 return( item->mode );
441 if( item->mode != xDataXML_itemModeEnd ) {
442 if( item->mode == xDataXML_itemModeText ) {
443 item->mode = xDataXML_itemModeElement;
444 if( item->element == NULL ) item->mode = xDataXML_itemModeEnd;
445 item->textOffset += item->textLength;
446 item->textLength = 0;
447 item->text = &(item->parentElement->text.text[item->textOffset]); }
449 item->element = item->element->next;
450 item->mode = xDataXML_itemModeText;
451 if( item->element == NULL ) {
452 if( item->textOffset < item->parentElement->text.length ) {
453 item->textLength = item->parentElement->text.length - item->textOffset; }
455 item->mode = xDataXML_itemModeEnd;
458 item->textLength = item->element->textOffset - item->textOffset;
462 return( item->mode );
471 for( i = 0; i < attributes->number; i++ ) {
472 if( !strcmp( attributes->attributes[i].name, name ) )
return( 1 );
490 for( i = 0; i < attributes->number; i++ ) {
491 if( !strcmp( attributes->attributes[i].name, name ) )
return( attributes->attributes[i].value );
507 return( attributes->number );
514 if( index >= attributes->number )
return( NULL );
515 return( &(attributes->attributes[index]) );
522 xDT->status = xDataXML_xDataType_Ok;
524 xDT->element = element;
526 xDT->toString = NULL;
528 xDT->indexPresent = 1;
529 xDT->startPresent = 1;
531 xDT->lengthPresent = 1;
542 int xDataXML_getCommonData( statusMessageReporting *smr, xDataXML_element *element, xDataTOM_Int *index, xDataTOM_Int *start, xDataTOM_Int *end,
543 xDataTOM_Int *length ) {
545 if( element->xDataTypeInfo.ID == NULL ) {
547 "element %s is not xData", element->fullName );
550 *index = element->xDataTypeInfo.index;
551 *start = element->xDataTypeInfo.start;
552 *end = element->xDataTypeInfo.end;
553 *length = element->xDataTypeInfo.length;
561 xDataXMLType *xDT = &(element->xDataTypeInfo);
572 if( ( xDT->endPresent > 0 ) ) {
573 if( xDT->lengthPresent > 0 ) {
577 xDT->end = xDT->length; }
579 if( xDT->lengthPresent > 0 ) xDT->length = xDT->end;
582 if( xDT->startPresent > 0 ) xDT->start = 0;
583 if( xDT->start < 0 ) {
587 if( xDT->end < xDT->start ) {
588 smr_setReportError3( smr, smrUser,
xDataTOM_smrLibraryID, 1,
"start = %d >= end = %d", xDT->start, xDT->end );
591 if( xDT->length < 0 ) {
610 "missing required attribute '%s'", name );
613 *n = (xDataTOM_Int) strtoll( value, &e, 10 );
616 "could not convert attribute %s's value = %s to an integer", name, value );
633 "missing required attribute '%s'", name );
636 *d = strtod( value, &e );
639 "could not convert attribute %s's values = %s to a double", name, value );
650 xDataXML_element *child;
662 xDataXML_element *child;
663 xDataXML_elementListItem *p;
664 xDataXML_elementList *list = NULL;
667 size =
sizeof( xDataXML_elementList ) + n *
sizeof( xDataXML_elementListItem );
668 if( ( list = (xDataXML_elementList *) smr_malloc2( smr, size, 0,
"list" ) ) != NULL ) {
670 p = list->items = (xDataXML_elementListItem *) &(list[1]);
672 if( !strcmp( child->name, tagName ) ) {
674 p->sortString = NULL;
686 xDataXML_elementList *list;
687 xDataXML_element *xData = NULL;
692 1,
"element %s does not have sub-element named %s", element->fullName, name ); }
693 else if( list->n > 1 ) {
695 "element %s contains more than one sub-element named %s", element->fullName, name ); }
697 xData = list->items[0].element;
720 name = element->name;
721 size = (int) strlen( name ) + 1;
736 if( parentRoot->parentRoot == NULL ) {
737 s = (
char *) smr_malloc2( smr, n + 1, 0,
"traceback string" );
740 name = parentRoot->parentElement->name;
741 size = (int) strlen( name ) + 1;
755 if( xDT->ID == NULL ) {
757 "element %s not xData object", xDT->element->fullName ); }
758 else if( xDT->ID != ID ) {
760 "Element %s is not xData object of ID %s but %s", xDT->element->fullName, ID, xDT->ID );
762 return( xDT->ID == ID );
769 return( doc->fileName );
776 return( doc->realFileName );
787 if( fileName != NULL ) {
788 if( ( doc->fileName = smr_allocateCopyString2( smr, fileName,
"fileName" ) ) == NULL )
return( 1 );
789 if( realpath( fileName, realPath ) != NULL ) {
790 if( ( doc->realFileName = smr_allocateCopyString2( smr, realPath,
"realFileName" ) ) == NULL )
return( 1 );
800 xDataXML_rootElement* root = element->parentRoot;
802 while( root->parentRoot != NULL ) root = root->parentRoot;
803 return( root->xData_doc );
810 if( doc == NULL )
return( NULL );
811 return( &(doc->smrUserInterface ) );
826 doc->smrUserInterface.doc = doc;
834 doc->smrUserInterface.smrUserInterface = NULL;
835 doc->smrUserInterface.doc = NULL;
843 xDataXML_smr *smrUserInterface = (xDataXML_smr *) userData;
844 xDataXML_rootElement *currentRoot = smrUserInterface->doc->currentRoot;
846 if( currentRoot->parentElement != NULL ) {
847 return(
smr_allocateFormatMessage(
"\nat line %d and column %d of file %s\nin element %s", currentRoot->parentElement->docInfo.line,
848 currentRoot->parentElement->docInfo.column, smrUserInterface->doc->fileName, currentRoot->parentElement->fullName ) ); }
849 else if( smrUserInterface->doc->fileName != NULL ) {
852 return(
smr_allocateFormatMessage(
"\nat line %d and column %d\nin element %s", currentRoot->parentElement->docInfo.line,
853 currentRoot->parentElement->docInfo.column, currentRoot->parentElement->fullName ) );
862 int status = 1,
n =
sizeof( tmp );
864 for( s = c; *s != 0; s++ )
if( !isspace( *s ) )
break;
865 *value = (xDataTOM_Int) strtoll( s, e, 10 );
869 if( *endings == 0 )
while( isspace( **e ) ) (*e)++;
873 if( *endings == 0 ) {
874 smr_setReportError3( smr, smrUserInterface,
xDataTOM_smrLibraryID, 1,
"integer string \"%s\" does not end with a '\\0'",
877 if( strchr( endings, **e ) == NULL ) {
878 smr_setReportError3( smr, smrUserInterface,
xDataTOM_smrLibraryID, 1,
"integer string \"%s\" does not end with a white space or a '\\0\'",
891 int xDataXML_stringTo_double( statusMessageReporting *smr,
void *smrUserInterface,
char const *c,
double *value,
char const *endings,
char **e ) {
895 int status = 1,
n =
sizeof( tmp );
897 for( s = c; *s != 0; s++ )
if( !isspace( *s ) )
break;
898 *value = strtod( s, e );
900 smr_setReportError3( smr, smrUserInterface,
xDataTOM_smrLibraryID, 1,
"could not convert \"%s\" to an double",
903 if( *endings == 0 )
while( isspace( **e ) ) (*e)++;
907 if( *endings == 0 ) {
908 smr_setReportError3( smr, smrUserInterface,
xDataTOM_smrLibraryID, 1,
"double string \"%s\" does not end with a '\\0'",
911 if( strchr( endings, **e ) == NULL ) {
912 smr_setReportError3( smr, smrUserInterface,
xDataTOM_smrLibraryID, 1,
"double string \"%s\" does not end with a white space or a '\\0\'",
927 element->accessed += increment;
928 return( element->accessed );
935 return( element->accessed );
942 if( strlen( In ) > size ) {
943 strncpy( Out, In, size - 5 );
945 strcat( Out,
" ..." );
956 xDataTOM_element *TOMChild;
957 xDataXML_element *XMLChild;
958 xDataXML_attribute *attribute;
963 for( i = 0; 1; i++ ) {
972 if( xDataValue == NULL ) {
996 printf(
"Unsupported xData type '%s' in element '%s'\n", xDataValue, XE->name );
999 "Unsupported xData type = \"%s\"", xDataValue );
1009 void *
xDataXML_initializeData( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE,
char const *ID,
size_t size ) {
1011 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
1015 return( xDI->data );
1018 #if defined __cplusplus
char const * xDataTOM_V_W_XYs_LegendreSeries_ID
static int xDataXML_parse(xDataXML_document *doc, char const *s)
static int xDataXML_addElementToRoot(statusMessageReporting *smr, xDataXML_rootElement *parentRoot, char const *name, char const **attris)
enum xDataXML_itemMode xDataXML_getFirstItem(xDataXML_element *element, xDataXML_item *item)
static int xDataXML_parseInitializeText(xDataXML_document *doc, xDataXML_text *text)
char const * xDataXML_getAttributesValueInElement(xDataXML_element *element, char const *name)
static char const * xDataXML_shortStringForMessage(size_t size, char *Out, char const *In)
int xDataXML_KalbachMannToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_axesElememtToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes)
int xDataXML_attributeListLength(xDataXML_attributionList *attributes)
XML_Size XMLCALL XML_GetCurrentLineNumber(XML_Parser parser)
char const * xDataXML_getRealFileName(xDataXML_document *doc)
int xDataXML_numberOfElementsByTagName(statusMessageReporting *, xDataXML_element *element, char const *tagName)
xDataXML_attribute * xDataXML_attributeByIndex(xDataXML_attributionList *attributes, int index)
int xDataXML_regionsW_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_polynomialToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
const XML_LChar *XMLCALL XML_ErrorString(enum XML_Error code)
int xDataXML_parseIsError(xDataXML_document *doc)
void xDataXML_freeElementList(statusMessageReporting *, xDataXML_elementList *list)
XML_Size XMLCALL XML_GetCurrentColumnNumber(XML_Parser parser)
void * xData_initializeData(statusMessageReporting *smr, xDataTOM_element *TE, char const *ID, size_t size)
static int xDataXML_init_xDataTypeNone(xDataXMLType *xDT, xDataXML_element *element)
xDataXML_element * xDataXML_getOneElementByTagName(statusMessageReporting *smr, xDataXML_element *element, char *name, int required)
int xDataTOME_addAttribute(statusMessageReporting *smr, xDataTOM_element *element, char const *name, char const *value)
xDataTOM_TOM * xDataTOM_mallocTOM(statusMessageReporting *smr)
int xDataTOM_smrLibraryID
char const * xDataTOM_regionsXYs_ID
static int xDataXML_setFileName(statusMessageReporting *smr, xDataXML_document *doc, char const *fileName)
XML_Parser XMLCALL XML_ParserCreate(const XML_Char *encodingName)
static int xDataXML_smrUserInterfaceInitialize(xDataXML_document *doc)
void * xDataTOM_freeTOM(statusMessageReporting *, xDataTOM_TOM **TOM)
xDataTOM_TOM * xDataXML_importFile(statusMessageReporting *smr, char const *fileName)
int xDataXML_stringTo_double(statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
char const * xDataTOM_V_W_XYs_ID
int xDataTOM_setFileNameTOM(statusMessageReporting *smr, xDataTOM_TOM *TOM, const char *fileName)
int xDataXML_V_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
static void XMLCALL xDataXML_parseEndElement(void *userData, char const *name)
char * smr_allocateFormatMessage(char const *fmt,...)
char const * xDataTOM_polynomial_ID
static xDataXML_document * xDataXML_mallocDoc(statusMessageReporting *smr)
char * xDataXML_getAttributesValue(xDataXML_attributionList *attributes, char const *name)
xDataXML_document * xDataXML_importFile2(statusMessageReporting *smr, char const *fileName)
static void XMLCALL xDataXML_parseCharacterData(void *userData, XML_Char const *s, int len)
static char * xDataXML_getTraceback2(statusMessageReporting *smr, xDataXML_rootElement *parentRoot, int n)
int smr_isOk(statusMessageReporting *smr)
int xDataXML_V_W_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_isAttributeInElement(xDataXML_element *element, char const *name)
void * smr_freeMemory(void **p)
void XMLCALL XML_SetUserData(XML_Parser parser, void *p)
int xDataXML_W_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_addToAccessed(statusMessageReporting *, xDataXML_element *element, int increment)
char const * xDataTOM_W_XYs_LegendreSeries_ID
char const * xDataXML_getFileName(xDataXML_document *doc)
xDataXML_elementList * xDataXML_getElementsByTagName(statusMessageReporting *smr, xDataXML_element *element, char const *tagName)
static int xDataXML_initializeDoc(statusMessageReporting *smr, xDataXML_document *doc)
int xDataXML_getCommonData(statusMessageReporting *smr, xDataXML_element *element, xDataTOM_Int *index, xDataTOM_Int *start, xDataTOM_Int *end, xDataTOM_Int *length)
static char * xDataXML_smrUserInterface(void *userData)
int xDataXML_isAttributeInList(xDataXML_attributionList *attributes, char const *name)
enum XML_Error XMLCALL XML_GetErrorCode(XML_Parser parser)
enum xDataXML_itemMode xDataXML_getNextItem(xDataXML_item *item)
char const * xDataTOM_W_XYs_ID
void * xDataXML_freeDoc(statusMessageReporting *smr, xDataXML_document *doc)
static void xDataXML_initializeRootElement(xDataXML_document *doc, xDataXML_rootElement *re, xDataXML_element *parentElement, int depth)
char const * xDataTOM_regionsW_XYs_LegendreSeries_ID
int xDataXML_is_xDataType(statusMessageReporting *smr, xDataXMLType *xDT, char const *const ID, int setMsg)
void XMLCALL XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
static char * xDataXML_getTraceback(statusMessageReporting *smr, xDataXML_element *element)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
int xDataXML_regionsXYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
static int xDataXML_smrUserInterfaceFree(xDataXML_document *doc)
xDataTOM_element * xDataTOM_addElementInElement(statusMessageReporting *smr, xDataTOM_element *parent, int index, char const *name)
int xDataXML_getAccessed(statusMessageReporting *, xDataXML_element *element)
int xDataXML_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
static int xDataXML_endXMLParsing(statusMessageReporting *smr, xDataXML_document *doc)
void XMLCALL XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler)
int xDataXML_xDataTypeConvertAttributes(statusMessageReporting *smr, xDataXML_element *element)
void * xDataXML_initializeData(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)
static void xDataXML_freeElementItems(statusMessageReporting *smr, xDataXML_element *element)
static void XMLCALL xDataXML_parseStartElement(void *userData, char const *name, char const **attris)
void * xDataXML_get_smrUserInterfaceFromDocument(xDataXML_document *doc)
enum XML_Status XMLCALL XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
int xDataXML_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_stringTo_xDataTOM_Int(statusMessageReporting *smr, void *smrUserInterface, char const *c, xDataTOM_Int *value, char const *endings, char **e)
xDataXML_element * xDataXML_getDocumentsElement(xDataXML_document *doc)
static void * xDataXML_freeElement(statusMessageReporting *smr, xDataXML_element *element)
void XMLCALL XML_ParserFree(XML_Parser parser)
int xDataXML_convertAttributeToDouble(statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)
xDataXML_document * xDataXML_getElementsDocument(xDataXML_element *element)
char const * xDataTOM_KalbachMann_ID
char const * xDataTOM_XYs_ID
static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition(xDataXML_document *doc, xDataXML_docInfo *docInfo)
static int xDataXML_constructTOM(statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *element)