Esta función crea un elemento de sintaxis predeterminado que no está conectado a un árbol de sintaxis. El elemento es propiedad del analizador especificado. El elemento está incompleto porque no se ha establecido ninguno de sus atributos (por ejemplo el tipo o nombre).
CciElement* cpiCreateElement(
int* returnCode,
CciParser* parser);
Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del objeto de elemento nuevo. De lo contrario, se devuelve un valor de cero (CCI_NULL_ADDR) y returnCode indica la razón del error.
Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c:
/* Avanzar hasta el final del valor */
while (pc->iCurrentCharacter != quoteChar) {
advance( (PARSER_CONTEXT_ST *)context, parser );
}
/* Obtener un puntero al final del código */
endMarker = (char*)pc->iBuffer+(int)pc->iIndex;
/* Calcular el tamaño del código */
markedSize = (size_t)endMarker-(int)startMarker;
/* Convertir el valor de atributo a formato de intermediario */
data = CciNString((char *)startMarker, markedSize, pc->iCcsid);
/* Crear un elemento de nombre-valor nuevo para el atributo */
newElement = cpiCreateElement(&rc, parser);
cpiSetElementType(&rc, newElement, CCI_ELEMENT_TYPE_NAME_VALUE);
cpiSetElementName(&rc, newElement, data);
if (pc->trace) {
const char * mbData = mbString(data, pc->iCcsid);
fprintf(pc->tracefile, "PLUGIN: Created new NAMEVALUE element;
object=0x%x type=0x%x name=",
newElement, CCI_ELEMENT_TYPE_NAME_VALUE);
fprintf(pc->tracefile, "%s\n", mbData);
fflush(pc->tracefile);
free((void *)mbData);
}
/* Liberar la memoria creada en CciNString() */
free((void *)data);