Создание строки с помощью libxml2 (c ++) - PullRequest
5 голосов
/ 11 ноября 2010

Моя проблема в том, что я хочу создать дерево xml и получить простой строковый объект (или даже char *).И я не могу сохранить xml в файл.

Так что на входе у меня есть xmlDocPtr с полным деревом xml и я хочу получить строку, содержащую xml, но без использования файлов.

Спасибо за внимание.

Ответы [ 4 ]

10 голосов
/ 11 ноября 2010

Используйте 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 голос
/ 11 ноября 2010

Что-то, что я написал некоторое время назад.Надеюсь, это поможет ....

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);
0 голосов
/ 25 марта 2014

Если вы используете xmlDocDumpMemory (), будьте осторожны.Вызовите xmlCleanupParser () в самом конце, после использования xmlDocDumpMemory ().Похоже, что xmlDocDumpMemory () использует его внутренне.

0 голосов
/ 11 ноября 2010

Я не могу получить именно то, что вы хотите, но после изменения значения узла вы можете сохранить его легко с xmlDocDump.

...