Das mag wie eine einfache Frage erscheinen.Was ist ein XML-Parser? Using Expat
Aber ich habe nach einem XML-Parser gesucht, um in einer meiner Anwendungen zu verwenden, die unter Linux ausgeführt wird.
Ich benutze Expat und habe meine XML-Datei durch Lesen von einem in geparst. Die Ausgabe ist jedoch die gleiche wie die Eingabe.
Dies ist meine Datei, die ich beim Lesen bin:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<id>1</id>
<name>Hello, world!</name>
</book>
</books>
Doch nachdem ich diese bestanden haben, bekomme ich genau das gleiche wie der Ausgang. Es lässt mich fragen, wofür der Parser ist?
Nur noch eine Sache. Ich verwende Expat. Das scheint ziemlich schwierig zu sein. Mein Code ist unten: Dies liest eine Datei ein. Aber meine Anwendung muss einen Puffer analysieren, der von einem Socket und nicht von einer Datei empfangen wird. Gibt es Proben davon, die jemand hat?
int parse_xml(char *buff)
{
FILE *fp;
fp = fopen("mybook.xml", "r");
if(fp == NULL)
{
printf("Failed to open file\n");
return 1;
}
/* Obtain the file size. */
fseek (fp, 0, SEEK_END);
size_t file_size = ftell(fp);
rewind(fp);
XML_Parser parser = XML_ParserCreate(NULL);
int done;
memset(buff, 0, sizeof(buff));
do
{
size_t len = fread(buff, 1, file_size, fp);
done = len < sizeof(buff);
if(XML_Parse(parser, buff, len, done) == XML_STATUS_ERROR)
{
printf("%s at line %d\n", XML_ErrorString(XML_GetErrorCode(parser)),
XML_GetCurrentLineNumber(parser));
return 1;
}
}
while(!done);
fclose(fp);
XML_ParserFree(parser);
return 0;
}