使用libxml2创建字符串(c ++)

时间:2010-11-11 15:00:01

标签: c++ libxml2

我的问题是我想创建xml树并获得一个简单的字符串对象(甚至是char *)。 我无法将xml保存到文件中。

所以在输入中我有xmlDocPtr和完整的xml树,并希望得到包含xml但不使用文件的字符串。

请注意。

4 个答案:

答案 0 :(得分:10)

使用xmlDocDumpMemory或其任何表兄弟。用法:

void xml_to_string(xmlDocPtr doc, std::string &out)
{
    xmlChar *s;
    int size;
    xmlDocDumpMemory(doc, &s, &size);
    if (s == NULL)
        throw std::bad_alloc();
    try {
        out = (char *)s;
    } catch (...) {
        xmlFree(s);
        throw;
    }
    xmlFree(s);
}

答案 1 :(得分:1)

我刚才写的东西。希望它有所帮助......

xmlDocPtr pDoc = ... // your xml docuemnt

xmlCharPtr psOutput;
int iSize;
xmlDocDumpFormatMemoryEnc(pDoc, &psOutput, &iSize, "UTF-8", 1);

// psOutput should point to the string.

// Don't forget to free the memory.
xmlFree(psOutput);

答案 2 :(得分:0)

如果你使用xmlDocDumpMemory()要小心。在使用xmlDocDumpMemory()之后,在最后调用xmlCleanupParser()。似乎xmlDocDumpMemory()在内部使用它。

答案 3 :(得分:-1)

我无法得到您想要的内容,但在更改节点值后,您可以使用xmlDoc转储保存easily