Diese Funktion erstellt ein Syntaxelement, das dem angegebenen Parser gehört und nicht an eine Syntaxbaumstruktur angehängt ist. Das Element wird teilweise initialisiert mit den Werten der folgenden Parameter: Typ, Name, firstChildComplete und lastChildComplete.
CciElement* cpiCreateAndInitializeElement(
int* returnCode,
CciParser* Parser,
CciElementType type,
const CciChar* name,
CciBool firstChildComplete,
CciBool lastChildComplete);
Falls erfolgreich, wird die Adresse des neuen Elementobjekts zurückgegeben. Andernfalls wird als Wert null (CCI_NULL_ADDR) zurückgegeben, und der Rückkehrcode gibt den Grund für den Fehler an.
/* Zum Ende des Wertes gehen */
while (pc->iCurrentCharacter != quoteChar) {
advance( (PARSER_CONTEXT_ST *)context, parser );
}
/* Rufen Sie einen Zeiger zum Tagende ab */
endMarker = (char*)pc->iBuffer+(int)pc->iIndex;
/* Berechnen Sie die Größe des Tags */
markedSize = (size_t)endMarker-(int)startMarker;
/* Konvertieren Sie den Attributwert ins Brokerformat */
data = CciNString((char *)startMarker, markedSize, pc->iCcsid);
/* Erstellen Sie ein neues Namenswertelement für das Attribut */
newElement = cpiCreateAndInitializeElement(&rc, parser, type, name);
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);
}
/* Geben Sie den in CciNString() erstellten Speicherplatz frei */
free((void *)data);