c++ - 使用 libxml2 编写 Base64 编码的文本节点

标签 c++ c xml base64 libxml2

我还没有找到关于 libxml2 的合适教程,因此我在一些基本概念上苦苦挣扎,“只有”API docs恕我直言,在某些方面有点过于简短。

这是 (C++) 我尝试将 Base64 编码数据写入文档(作为根元素的子元素的文本节点):

// create doc and root node
xmlDocPtr doc = xmlNewDoc( (xmlChar*) "1.0" );
xmlNodePtr root_node = xmlNewNode( 0, (xmlChar*) "root" );
xmlDocSetRootElement( doc, root_node );

// create text node and write data
xmlNodePtr node = xmlNewDocText( doc, (xmlChar*) "" );
xmlAddChild( root_node, node );
xmlTextWriterPtr writer = xmlNewTextWriterTree( doc, node, 0 );
xmlTextWriterWriteBase64( writer, "asdf", 0, 4 );

下面只是做测试输出:

// get textual representation
xmlChar *mem = 0;
int size = 0;
xmlDocDumpFormatMemory( doc, &mem, &size, 1 );
if ( mem ) {
    std::cout << mem << std::endl;
}

不幸的是,文本节点没有出现在输出中。

我会很感激这个问题的解决方案有关 libxml2 的介绍性 Material 的一些链接。

最佳答案

看来 xmlTextWriterWriteBase64() 需要文本放置位置的上下文。我能够通过 xmlTextWriterStartElement()、xmlTextWriterWriteBase64() 和 xmlTextWriterEndElement() 将文本添加到新元素。您会认为给 xmlNewTextWriterTree() 一个节点会设置上下文,但显然它不会。 libxml 的“文档”非常糟糕(甚至是示例应用程序);他们告诉你怎么做,但不告诉你为什么。我真的不知道有什么好的文档;我只是通过反复试验(悲伤)自己弄清楚了大部分内容。

关于c++ - 使用 libxml2 编写 Base64 编码的文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470811/

相关文章:

c++ - boost shared_ptr 的 const 正确性

c - 声明内联函数后,什么会再次导致多重定义错误?

javascript - 使用 javascript 获取 facebook 分享数

c++ - 保存图像而不压缩

c++ - Windows ErrorMessage 返回代码而不是消息

c - 如何从 Lua 返回值列表到 C 并逐一打印?

java - Jackson xml 反序列化 - 序列化为一个列表,其中包含任意元素

xml - 如何使用 PowerShell 向 web.config 添加一个部分?

c++ - 无法成功返回我通过在字符串上调用 c_str() 创建的 const char*。 (C++)

python - 如何高效地将图像从C进程传递到Python进程?