用c++写一个读写xml文件的代码
时间: 2023-08-31 07:27:23 浏览: 138
xml文件的读写 C++
5星 · 资源好评率100%
### 回答1:
可以使用libxml2库来读写xml文件,以下是一个简单的示例代码:
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main() {
xmlDocPtr doc;
xmlNodePtr root, node;
xmlChar *content;
// 创建一个空的xml文档
doc = xmlNewDoc(BAD_CAST "1.");
root = xmlNewNode(NULL, BAD_CAST "root");
xmlDocSetRootElement(doc, root);
// 添加一个子节点
node = xmlNewChild(root, NULL, BAD_CAST "node", BAD_CAST "Hello World!");
// 保存xml文档到文件
xmlSaveFormatFileEnc("test.xml", doc, "UTF-8", 1);
// 读取xml文件
doc = xmlReadFile("test.xml", NULL, );
root = xmlDocGetRootElement(doc);
// 遍历子节点并输出内容
for (node = root->children; node != NULL; node = node->next) {
content = xmlNodeGetContent(node);
printf("%s\n", content);
xmlFree(content);
}
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
return ;
}
### 回答2:
C语言中没有内置的库函数可以直接读写XML文件,但可以通过第三方库来实现。以下是使用libxml2库来读写XML文件的简单代码示例:
```c
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
void writeXML(const char* filename) {
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL;
xmlNodePtr node = NULL;
// 创建一个XML文档以及根节点
doc = xmlNewDoc(BAD_CAST "1.0");
root = xmlNewNode(NULL, BAD_CAST "root");
xmlDocSetRootElement(doc, root);
// 创建一个子节点并设置文本内容
node = xmlNewTextChild(root, NULL, BAD_CAST "name", BAD_CAST "John");
// 将XML文档写入文件
xmlSaveFormatFileEnc(filename, doc, "UTF-8", 1);
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
}
void readXML(const char* filename) {
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL;
xmlNodePtr node = NULL;
// 解析XML文件
doc = xmlParseFile(filename);
if (doc == NULL) {
fprintf(stderr, "Failed to parse XML file\n");
return;
}
// 获取根节点
root = xmlDocGetRootElement(doc);
// 遍历子节点并打印文本内容
for (node = root->children; node; node = node->next) {
if (node->type == XML_ELEMENT_NODE) {
printf("%s: %s\n", node->name, xmlNodeGetContent(node));
}
}
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
}
int main() {
const char* filename = "sample.xml";
writeXML(filename);
readXML(filename);
return 0;
}
```
这段代码定义了两个函数:writeXML和readXML,分别用于写入和读取XML文件。在函数main中,先调用writeXML函数创建一个sample.xml文件,然后再调用readXML函数读取该文件并打印出节点名称和文本内容。
注意:在使用此代码之前,确保已经安装了libxml2库,并在编译时链接该库。
### 回答3:
下面是一个简单的例子,展示了如何使用C语言读取和写入XML文件。
读取XML文件的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void parseXML(const char *filename) {
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(filename);
if (doc == NULL) {
fprintf(stderr, "无法打开文件\n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr, "空文件\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(cur->name, (const xmlChar *)"root")) {
fprintf(stderr, "不正确的文件格式\n");
xmlFreeDoc(doc);
return;
}
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"node"))) {
xmlChar *key;
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf("节点内容: %s\n", key);
xmlFree(key);
}
cur = cur->next;
}
xmlFreeDoc(doc);
return;
}
int main() {
const char *filename = "example.xml";
parseXML(filename);
return 0;
}
```
写入XML文件的代码如下:
```c
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main() {
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr root = xmlNewNode(NULL, BAD_CAST "root");
xmlNodePtr node = xmlNewNode(NULL, BAD_CAST "node");
xmlDocSetRootElement(doc, root);
xmlAddChild(root, node);
xmlNodePtr content = xmlNewText(BAD_CAST "这是一个节点的内容");
xmlAddChild(node, content);
xmlSaveFormatFileEnc("example.xml", doc, "UTF-8", 1);
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
```
上面的代码使用了libxml库来读取和写入XML文件。读取XML文件的代码首先打开并解析了XML文件,然后遍历每个节点并打印出节点的内容。
写入XML文件的代码创建了一个XML文档对象,并创建了根节点和一个子节点,然后将内容添加到子节点中,并将根节点设置为XML文档的根节点,最后将该文档保存到文件中。
这只是简单的XML读写操作的示例,实际项目中可能需要更复杂的操作和对XML结构的更深入理解。
阅读全文