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