Expat是一個用于解析XML的庫,它是開源的并且跨平臺。在Linux中,你可以使用Expat庫來解析XML文檔。
下面是一個簡單的示例代碼,演示如何使用Expat庫來解析XML文檔:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "expat.h"
void start_element(void *userData, const XML_Char *name, const XML_Char **atts) {
printf("Start Element: %s\n", name);
}
void end_element(void *userData, const XML_Char *name) {
printf("End Element: %s\n", name);
}
void char_data(void *userData, const XML_Char *s, int len) {
printf("Character Data: %.*s\n", len, s);
}
int main() {
XML_Parser parser = XML_ParserCreate(NULL);
if (parser == NULL) {
printf("Error creating parser\n");
return 1;
}
XML_SetUserData(parser, NULL);
XML_SetElementHandler(parser, start_element, end_element);
XML_SetCharacterDataHandler(parser, char_data);
if (XML_Parse(parser, "example.xml", strlen("example.xml"), 1) == XML_STATUS_ERROR) {
printf("Error parsing XML file: %s\n", XML_ErrorString(XML_GetErrorCode(parser)));
return 2;
}
XML_ParserFree(parser);
return 0;
}
在上面的示例中,我們首先包含了必要的頭文件expat.h
。然后,我們定義了三個處理函數start_element
、end_element
和char_data
,分別用于處理XML元素的開始、結束和字符數據。
在main
函數中,我們使用XML_ParserCreate
函數創建一個Expat解析器。然后,我們使用XML_SetUserData
函數將用戶數據設置為NULL
,使用XML_SetElementHandler
函數設置元素開始和結束的處理函數,使用XML_SetCharacterDataHandler
函數設置字符數據的處理函數。
最后,我們使用XML_Parse
函數解析XML文檔,如果解析成功,則輸出解析結果,否則輸出錯誤信息。最后,我們使用XML_ParserFree
函數釋放解析器。
請注意,上述示例中的example.xml
應替換為你要解析的XML文檔的路徑。此外,你可能需要根據你的需求修改處理函數的實現。