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

时间:2011-03-29 10:03:14

标签: c++ c xml base64 libxml2

我还没有找到一个关于libxml2的正确教程,因此我正在努力学习一些基本概念,只有“{3}}”,恕我直言,在某些方面有点过于简短。

这是(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的介绍材料的链接。

1 个答案:

答案 0 :(得分:3)

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