"<root name = "modbus"><element>data</element></root>" C语言如何解析这个xml字符串
时间: 2023-08-14 13:28:11 浏览: 117
在C语言中,可以使用libxml2库来解析XML字符串。以下是一个简单的示例:
```c
#include <stdio.h>
#include <libxml/parser.h>
int main() {
const char* xmlString = "<root name=\"modbus\"><element>data</element></root>";
xmlDocPtr doc = xmlReadMemory(xmlString, strlen(xmlString), "noname.xml", NULL, 0);
if (doc == NULL) {
fprintf(stderr, "Failed to parse XML string\n");
return 1;
}
xmlNodePtr root = xmlDocGetRootElement(doc);
xmlChar* name = xmlGetProp(root, "name");
printf("Root element name: %s\n", name);
xmlNodePtr node = root->children;
while (node != NULL) {
if (node->type == XML_ELEMENT_NODE) {
printf("Element name: %s, value: %s\n", node->name, xmlNodeGetContent(node));
}
node = node->next;
}
xmlFree(name);
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
```
在这个示例中,我们首先定义了一个 XML 字符串 `xmlString`,然后使用 `xmlReadMemory()` 函数将其解析为 `xmlDocPtr` 类型的文档对象。如果解析失败,我们会输出错误信息并退出程序。如果解析成功,我们首先获取根节点元素对象 `root`,然后通过 `xmlGetProp()` 函数获取根元素的 name 属性值,并输出到控制台。接着,我们遍历根元素的子节点,通过 `xmlNodeGetContent()` 函数获取子节点的文本内容,并输出到控制台。最后,我们释放属性值所占用的内存,释放文档对象所占用的内存,并清理 libxml2 库中使用的资源。
需要注意的是,在使用 `xmlGetProp()` 函数获取属性值时,返回的是一个 `xmlChar*` 类型的指针,需要手动释放内存。同样地,在使用 `xmlNodeGetContent()` 函数获取节点内容时,返回的也是一个 `xmlChar*` 类型的指针,需要手动释放内存。
阅读全文