在使用 libxml2 库处理 XML 文档时,可以使用 xmlSaveFormatFileEnc() 函数来保存 XML 文件,并保留文档中标签闭合方式。具体步骤如下:

  1. 使用 xmlReadFile() 函数读取 XML 文件,得到一个 xmlDocPtr 类型的文档对象。
xmlDocPtr doc = xmlReadFile('example.xml', NULL, 0);
  1. 对文档对象进行处理,比如修改节点内容、删除节点等。

  2. 使用 xmlSaveFormatFileEnc() 函数保存修改后的 XML 文件。该函数的第一个参数是保存的文件名,第二个参数是文档对象,第三个参数是字符编码。第四个参数指定是否将 XML 文件格式化输出,即是否在标签之间添加空格和换行符。如果要保留文档中标签闭合方式,则需要将该参数设置为 1。

xmlSaveFormatFileEnc('example_out.xml', doc, 'UTF-8', 1);

完整示例代码如下:

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

int main() {
    // 读取 XML 文件
    xmlDocPtr doc = xmlReadFile('example.xml', NULL, 0);
    if (doc == NULL) {
        printf('Failed to parse XML file.\n');
        return 1;
    }

    // 对文档对象进行处理
    xmlNodePtr root = xmlDocGetRootElement(doc);
    xmlNodePtr node = root->children;
    while (node) {
        if (xmlStrcmp(node->name, (const xmlChar *)'SpecificInformation') == 0) {
            // 修改 SpecificInformation 节点内容
            xmlNodeSetContent(node, (const xmlChar *)'specific info');
        } else if (xmlStrcmp(node->name, (const xmlChar *)'SpecMod') == 0) {
            // 删除 SpecMod 节点
            xmlUnlinkNode(node);
            xmlFreeNode(node);
        }
        node = node->next;
    }

    // 保存修改后的 XML 文件
    xmlSaveFormatFileEnc('example_out.xml', doc, 'UTF-8', 1);

    // 释放资源
    xmlFreeDoc(doc);
    xmlCleanupParser();
    return 0;
}

运行该程序后,会在当前目录下生成一个名为 example_out.xml 的文件,其中包含修改后的 XML 内容,同时保留了文档中标签闭合方式。

Libxml2 在 Windows 下保留 XML 标签闭合方式

原文地址: https://www.cveoy.top/t/topic/n3sb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录