|
char * _xml_string_tackon (char * buffer, int * cursize, int * curptr, char * data)
{
int len = strlen (data);
if (len + *curptr > *cursize) {
*cursize += 256;
buffer = (char *) realloc ((void *) buffer, *cursize);
}
*curptr += len;
strcat (buffer, data);
return (buffer);
}
char * _xml_string_append (char * buffer, int * cursize, int * curptr, XML * xml)
{
ATTR * attr;
ELEMENTLIST * list;
if (xml->name == NULL) {
buffer = _xml_string_tackon (buffer, cursize, curptr, xml->attrs->value);
return (buffer);
}
buffer = _xml_string_tackon (buffer, cursize, curptr, "<");
buffer = _xml_string_tackon (buffer, cursize, curptr, xml->name);
attr = xml->attrs;
while (attr != NULL) {
buffer = _xml_string_tackon (buffer, cursize, curptr, " ");
buffer = _xml_string_tackon (buffer, cursize, curptr, attr->name);
buffer = _xml_string_tackon (buffer, cursize, curptr, "=\"");
buffer = _xml_string_tackon (buffer, cursize, curptr, attr->value);
buffer = _xml_string_tackon (buffer, cursize, curptr, "\"");
attr = attr->next;
}
if (xml->children == NULL) {
buffer = _xml_string_tackon (buffer, cursize, curptr, "/>");
return (buffer);
} else buffer = _xml_string_tackon (buffer, cursize, curptr, "/>");
list = xml->children;
while (list) {
buffer = _xml_string_append (buffer, cursize, curptr, list->element);
list = list->next;
}
buffer = _xml_string_tackon (buffer, cursize, curptr, "</");
buffer = _xml_string_tackon (buffer, cursize, curptr, xml->name);
buffer = _xml_string_tackon (buffer, cursize, curptr, ">");
return (buffer);
}
char * xml_string (XML * xml)
{
char * ret;
int cursize;
int curptr;
ret = (char *) malloc (256);
*ret = '\0';
cursize = 256;
curptr = 0;
return (_xml_string_append (ret, &cursize, &curptr, xml));
}
char * xml_stringcontent (XML * xml)
{
char * ret;
int cursize;
int curptr;
ELEMENTLIST * list;
ret = (char *) malloc (256);
*ret = '\0';
cursize = 256;
curptr = 0;
list = xml->children;
while (list) {
ret = _xml_string_append (ret, &cursize, &curptr, list->element);
list = list->next;
}
return (ret);
}
|