c++ 漂亮的打印与libxml2?

of1yzvn4  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(157)

使用libxml2。我可以使用xmlSaveFormatFileEnc()将XML打印到一个文件中。但是,有没有一种方法可以在文本字符串或流中做同样的事情呢?
我希望避免将XML写入文件并将其读回,以获得XML的漂亮打印版本。
为了记录在案,我现在做的是:

xmlInitParser();
xmlKeepBlanksDefault(0);
xmlLineNumbersDefault(1);
xmlThrDefIndentTreeOutput(1);
xmlThrDefTreeIndentString("    ");

std::string content = "....."; // do something here to get the XML
xmlDoc * doc = xmlParseDoc((xmlChar*)content.c_str());

xmlSaveFormatFileEnc("output.xml", doc, "utf-8", 1); // pretty print
qyuhtwio

qyuhtwio1#

here窃取:

xmlBufferPtr buf;
/* Create a new XML buffer, to which the XML document will be
 * written */
buf = xmlBufferCreate();
if (buf == NULL) {
    std::cerr << "testXmlwriterMemory: Error creating the xml buffer" << std::endl;
    return;
}

/* Create a new XmlWriter for memory, with no compression.
 * Remark: there is no compression for this kind of xmlTextWriter */
writer = xmlNewTextWriterMemory(buf, 0);
if (writer == NULL) {
    std::cerr << "testXmlwriterMemory: Error creating the xml writer" << std::endl;
    return;
}

然后,在写入缓冲区之后:

std::cout << buf->content << std::endl
vmdwslir

vmdwslir2#

只需使用xmlSaveFormatFileTo()而不是xmlSaveFormatFileEnc()https://gnome.pages.gitlab.gnome.org/libxml2/devhelp/libxml2-tree.html#xmlSaveFormatFileTo

mlBuffer *buffer = xmlBufferCreate();
xmlOutputBuffer *outputBuffer = xmlOutputBufferCreateBuffer(buffer, NULL);
xmlSaveFormatFileTo(outputBuffer, doc, "utf-8", 1);
/* pretty print output in buffer->content */
xmlBufferFree(buffer);
/* outputBuffer has been closed in xmlSaveFormatFileTo */

相关问题