50 NewElt(
const char *name,
const char **atts)
63 newElt->
name = strdup(name);
64 newElt->
pcdata = (
char*)NULL;
68 newElt->
next = newElt;
75 nAtts = (
p - atts) >> 1;
77 qsort((
void *)atts, nAtts,
sizeof(
char *) * 2, (
int (*)(
const void *,
const void *))strcmp);
86 newAttr->
name = strdup(s1);
87 newAttr->
value = strdup(s2);
89 if (newElt->
attr == NULL) {
90 newElt->
attr = newAttr;
91 newAttr->
next = newAttr;
95 newElt->
attr = newAttr;
127 newElt =
NewElt(name, atts);
130 if (curElt->
sub == NULL) {
131 curElt->
sub = newElt;
132 newElt->
next = newElt;
136 curElt->
sub = newElt;
184 if ((*curElt)->up != NULL) {
185 *curElt = (*curElt)->
up;
195 if ((s1 = (
char*)malloc(len+1)) == NULL) {
202 while ((*s2 ==
' ') || (*s2 ==
'\t') || (*s2 ==
'\n')) {
208 while (((*s3 ==
' ') || (*s3 ==
'\t') || (*s3 ==
'\n')) && (s3 > s2)) {
214 (*curElt)->pcdata = strdup(s2);
245 if ((in = fopen(file,
"r")) == NULL) {
246 fprintf(stderr,
"xmlReadFile: file %s has pb (access rights ?)\n", file);
255 size_t len = fread(buf, 1,
sizeof(buf), in);
256 done = len <
sizeof(buf);
257 if (!
XML_Parse(parser, buf, len, done)) {
273 wr(
int indent,
const char *buf, FILE *out)
278 for(i = 0; i < indent*2; i++) blank[i] =
' ';
280 fprintf(out,
"%s%s", blank, buf);
295 curElt = curElt->
next;
298 curAttr = curElt->
attr;
301 curAttr = curAttr->
next;
304 }
while (curAttr != curElt->
attr);
306 snprintf(buf,
BUFMAX,
">");
314 snprintf(buf,
BUFMAX,
"</%s>\n", curElt->
name);
316 }
while (curElt != startElt);
345 if ((out = fopen(file,
"w")) == NULL) {
346 fprintf(stderr,
"xmlWriteFile: file %s has pb (access rights ?)\n", file);
350 snprintf(buf,
BUFMAX,
"<?xml version=\"1.0\" ?>\n");
352 snprintf(buf,
BUFMAX,
"\n<!DOCTYPE params SYSTEM \"%s\">\n\n", dtd);
355 wrrec(startElt, out);
382 cutAttr = curElt->
attr;
385 cutAttr = cutAttr->
next;
386 if (strcmp(cutAttr->
name, attrname) == 0) {
387 return strdup(cutAttr->
value);
389 }
while (cutAttr != curElt->
attr);
414 curElt = startElt->
next;
415 if (curElt->
up != NULL) {
442 if (startElt->
sub != NULL) {
472 if (curElt->
sub != NULL) {
477 if ((curElt->
up != NULL) && (curElt != curElt->
up->
sub)) {
482 while (curElt->
up != NULL) {
484 if ((curElt->
up != NULL) && (curElt != curElt->
up->
sub)) {
515 if (curElt->
sub != NULL) {
520 if ((curElt->
up != NULL) && (curElt != curElt->
up->
sub) && (curElt != topElt)) {
525 while ((curElt->
up != NULL) && (curElt != topElt)) {
527 if ((curElt->
up != NULL) && (curElt != curElt->
up->
sub)) {
560 if (strcmp(curElt->
name, name) == 0) {
595 if (strcmp(curElt->
name, name) == 0) {
596 cutAttr = curElt->
attr;
599 cutAttr = cutAttr->
next;
600 if (strcmp(cutAttr->
name, attrname) == 0) {
601 if (strcmp(cutAttr->
value, attrvalue) == 0) {
604 cutAttr = curElt->
attr;
607 }
while (cutAttr != curElt->
attr);
int XMLPARSEAPI XML_GetCurrentLineNumber(XML_Parser parser)
void XMLPARSEAPI XML_SetUserData(XML_Parser parser, void *userData)
static void startElement(void *userData, const char *name, const char **atts)
static void CharacterData(void *userData, const char *s, int len)
txmlElement * xmlSubElt(txmlElement *startElt)
static void wr(int indent, const char *buf, FILE *out)
int xmlWriteFile(const char *file, txmlElement *startElt, char *dtd)
struct xmlAttribute * attr
void XMLPARSEAPI XML_ParserFree(XML_Parser parser)
void XMLPARSEAPI XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler)
txmlElement * xmlInsertElt(txmlElement *curElt, const char *name, const char **atts)
static void endElement(void *userData, const char *)
int XMLPARSEAPI XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
txmlElement * xmlWalkSubElt(txmlElement *startElt, txmlElement *topElt)
txmlElement * xmlWalkElt(txmlElement *startElt)
enum XML_Error XMLPARSEAPI XML_GetErrorCode(XML_Parser parser)
XML_Parser XMLPARSEAPI XML_ParserCreate(const XML_Char *encoding)
txmlElement * xmlFindNextElt(txmlElement *startElt, char *name)
const XML_LChar XMLPARSEAPI * XML_ErrorString(int code)
static void wrrec(txmlElement *startElt, FILE *out)
txmlElement * xmlNextElt(txmlElement *startElt)
char * xmlGetAttr(txmlElement *curElt, char *attrname)
struct xmlAttribute * next
txmlElement * xmlReadFile(const char *file)
txmlElement * xmlFindEltAttr(txmlElement *startElt, char *name, char *attrname, char *attrvalue)
void XMLPARSEAPI XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
static txmlElement * NewElt(const char *name, const char **atts)