替换而不是添加xml节点

时间:2014-05-11 07:17:47

标签: c++ pugixml

在调用second()之后的这个简单代码中,1.xml只有一个节点" 1"。为什么pugi会替换节点,我该怎么做才能正确修改?

void first()
{
    pugi::xml_document document;
    pugi::xml_parse_result result = document.load_file("C:\\1.xml", parse_full);
    pugi::xml_node node = document.append_child("0");
    node.append_attribute("message") = "something";
    document.save_file("C:\\1.xml");
}
void second()
{
    pugi::xml_document document;
    pugi::xml_parse_result result = document.load_file("C:\\1.xml", parse_full);
    pugi::xml_node node = document.append_child("1");
    node.append_attribute("message") = "something else";
    document.save_file("C:\\1.xml");
}
void test()
{
    first();
    second();
}

1 个答案:

答案 0 :(得分:1)

您应该检查load_file的结果。

以下是这里发生的事情:

  1. XML标记名称不能以数字开头。这由XML标准定义。
  2. pugixml在加载文档时执行此检查 - 因此load_file()失败,生成空文档
  3. pugixml 在附加节点或保存文档时不执行此检查,因此可以保存无效文档