これは簡単な質問のようです。XMLパーサーとは何ですか? Expatの使用
しかし、Linuxで動作しているアプリケーションで使用するXMLパーサーを探していました。
私はExpatを使用していますが、私のXMLファイルを1インチで読むと解析しました。しかし、出力は入力と同じです。私はこれに合格した後、私は正確に出力と同じ取得し、
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<id>1</id>
<name>Hello, world!</name>
</book>
</books>
しかし:
この
は私が読んでいる私のファイルです。パーサーが何のためになっているのだろうか?もう1つだけです。私はExpatを使用しています。それは使いにくいようです。私のコードは以下の通りです:これはファイルを読み込みます。しかし、私のアプリケーションは、ファイルではなく、ソケットで受信されるバッファを解析する必要があります。誰もが持っているサンプルがありますか?
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;
}