У меня есть следующее, что делает xmlNodePtr
, а затем я хотел бы преобразовать этот узел в строку, сохраняя все форматирование XML и прочее:
std::string toString()
{
std::string xmlString;
xmlNodePtr noteKey = xmlNewNode(0, (xmlChar*)"noteKeyword");
std::vector<Note *>::iterator iter = notesList_.begin();
while(iter != notesList_.end())
{
xmlNodePtr noteNode = xmlNewNode(0, (xmlChar*)"Note");
xmlNodePtr userNode = xmlNewNode(0, (xmlChar*)"User");
xmlNodePtr dateNode = xmlNewNode(0, (xmlChar*)"Date");
xmlNodePtr commentNode = xmlNewNode(0, (xmlChar*)"Comment");
xmlNodeSetContent(userNode, (xmlChar*)(*iter)->getUser().c_str());
xmlNodeSetContent(dateNode, (xmlChar*)(*iter)->getDate().c_str());
xmlNodeSetContent(commentNode, (xmlChar*)(*iter)->getComment().c_str());
xmlAddChild(noteNode, userNode);
xmlAddChild(noteNode, dateNode);
xmlAddChild(noteNode, commentNode);
xmlAddChild(noteKey, noteNode);
iter++;
}
xmlDocPtr noteDoc = noteKey->doc;
//this doesn't appear to work, do i need to allocate some memory here?
//or do something else?
xmlOutputBufferPtr output;
xmlNodeDumpOutput(output, noteDoc, noteKey, 0, 1, "UTF-8");
//somehow convert output to a string?
return xmlString;
}
Моя проблема в том, что узел выглядит нормально, но я не знаю, как затем преобразовать узел в std :: string. Я также пытался использовать xmlNodeListGetString
и xmlDocDumpFormatMemory
, но я не мог заставить их работать. Спасибо за пример конвертации из узла в строку. Спасибо.