[Expat-discuss] not well-formed (invalid token) at line 1

zhang yikai yikaikai at gmail.com
Wed May 5 05:55:59 CEST 2010


hi all,

I want to use expat analysis xml file, here is my code modify from examples:


static void XMLCALL
startElement(void *userData, const char *name, const char **atts)
{
  int i;
  int *depthPtr = (int *)userData;
    for (i = 0; i < *depthPtr; i++)
    putchar('\t');
    puts(name);
    for (i = 0; atts[i]; i += 2)
    {
            printf(" %s='%s'", atts[i], atts[i + 1]);
    }

  *depthPtr += 1;

}


static void XMLCALL
endElement(void *userData, const char *name)
{
  int *depthPtr = (int *)userData;
  *depthPtr -= 1;
}

int
main(int argc, char *argv[])
{
char buf[1024] = "<?xml version=\"1.0\" encoding=\"UTF-8\"
standalone=\"no\" ?>\
<INVENTORY>\
<BOOK>\
<TITLE>The Adventures of Huckleberry Finn</TITLE>\
<AUTHOR>Mark Twain</AUTHOR>\
<BINDING>mass market paperback</BINDING>\
<PAGES>298</PAGES>\
<PRICE>$5.49</PRICE>\
</BOOK>\
<BOOK>\
<TITLE>Leaves of Grass</TITLE>\
<AUTHOR>Walt Whitman</AUTHOR>\
<BINDING>hardcover</BINDING>\
<PAGES>462</PAGES>\
<PRICE>$7.75</PRICE>\
</BOOK>\
</INVENTORY>";




  XML_Parser parser = XML_ParserCreate(NULL);
  int done;
  int depth = 0;
  XML_SetUserData(parser, &depth);
  XML_SetElementHandler(parser, startElement, endElement);
  do {
    if (XML_Parse(parser, buf, 1024, 1) == XML_STATUS_ERROR) {
      printf("%s at line %d\n" XML_FMT_INT_MOD "u\n",
              XML_ErrorString(XML_GetErrorCode(parser)),
              XML_GetCurrentLineNumber(parser));
      return 1;
    }
  } while (1);
  XML_ParserFree(parser);
  return 0;
}



got result :

INVENTORY
        BOOK
                TITLE
                AUTHOR
                BINDING
                PAGES
                PRICE
        BOOK
                TITLE
                AUTHOR
                BINDING
                PAGES
                PRICE
not well-formed (invalid token) at line 1


what wrong with my code?   thank you


More information about the Expat-discuss mailing list