C语言简单获取xml信息,不用libxml2库
时间: 2023-12-01 09:03:27 浏览: 190
在C语言中,如果不使用libxml2库,可以使用标准库中的expat库来解析XML文档。以下是一个简单的示例代码,用于获取XML文档中指定元素的内容:
```
#include <stdio.h>
#include <string.h>
#include <expat.h>
// 保存目标元素名称和内容
char target_name[100];
char target_content[1000];
int target_found = 0;
// 处理起始元素的回调函数
void start_element(void *data, const char *element, const char **attribute) {
if (strcmp(element, target_name) == 0) {
// 找到目标元素,设置标志位
target_found = 1;
}
}
// 处理元素内容的回调函数
void character_data(void *data, const char *text, int length) {
if (target_found) {
// 保存目标元素的内容
strncpy(target_content, text, length);
target_content[length] = '\0';
target_found = 0;
}
}
int main() {
XML_Parser parser;
FILE *file;
char buf[1024];
int len;
// 打开XML文档
file = fopen("example.xml", "r");
if (file == NULL) {
fprintf(stderr, "Failed to open XML document\n");
return 1;
}
// 创建XML解析器
parser = XML_ParserCreate(NULL);
if (parser == NULL) {
fprintf(stderr, "Failed to create XML parser\n");
return 1;
}
// 设置回调函数
XML_SetElementHandler(parser, start_element, NULL);
XML_SetCharacterDataHandler(parser, character_data);
// 读取XML文档并解析
do {
len = fread(buf, 1, 1024, file);
if (XML_Parse(parser, buf, len, len < 1024) == XML_STATUS_ERROR) {
fprintf(stderr, "XML parse error\n");
return 1;
}
} while (len > 0);
// 输出目标元素的内容
printf("Target element content: %s\n", target_content);
// 释放内存并关闭文件
XML_ParserFree(parser);
fclose(file);
return 0;
}
```
在主函数中,首先打开XML文档并创建XML解析器,然后设置回调函数。`start_element`函数用于处理起始元素,如果找到目标元素,则设置标志位;`character_data`函数用于处理元素内容,如果标志位已设置,则保存目标元素的内容。接着,循环读取XML文档并解析,并在最后输出目标元素的内容。注意,这里假设目标元素只出现一次,如果有多个目标元素,需要使用循环来获取其内容。
阅读全文