linuxC++解析时一个xml文件,将<configuration> <property> <name> A </name><value>B</value> </property> </configuration>中的B进行修改
时间: 2023-10-29 16:06:08 浏览: 121
可以使用第三方库来解析XML文件,比如在Linux上常用的是libxml2库。以下是一个使用libxml2库解析XML文件并修改B的示例代码:
```c++
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int main() {
xmlDocPtr doc;
xmlNodePtr root, node;
xmlChar *value;
// 读取XML文件
doc = xmlReadFile("config.xml", NULL, 0);
if (doc == NULL) {
fprintf(stderr, "Failed to parse XML file\n");
return 1;
}
// 获取根节点
root = xmlDocGetRootElement(doc);
// 遍历所有property节点
for (node = root->children; node; node = node->next) {
if (xmlStrcmp(node->name, (const xmlChar *)"property") == 0) {
// 获取name子节点的值
xmlNodePtr name_node = xmlFirstElementChild(node);
if (xmlStrcmp(name_node->name, (const xmlChar *)"name") == 0) {
value = xmlNodeListGetString(doc, name_node->children, 1);
if (xmlStrcmp(value, (const xmlChar *)"A") == 0) {
// 获取value子节点的值
xmlNodePtr value_node = xmlLastElementChild(node);
if (xmlStrcmp(value_node->name, (const xmlChar *)"value") == 0) {
value = xmlNodeListGetString(doc, value_node->children, 1);
printf("Original value: %s\n", value);
// 修改value子节点的值
xmlNodeSetContent(value_node, (const xmlChar *)"new_value");
value = xmlNodeListGetString(doc, value_node->children, 1);
printf("New value: %s\n", value);
}
}
}
}
}
// 保存修改后的XML文件
xmlSaveFormatFileEnc("config.xml", doc, "UTF-8", 1);
// 释放资源
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
```
需要注意的是,以上代码仅适用于示例XML文件的格式,如果XML文件格式不同,需要相应地修改代码。此外,修改后的XML文件会直接覆盖原文件,建议先备份原文件。
阅读全文