Записать текстовый узел в кодировке Base64 с помощью libxml2 - PullRequest
1 голос
/ 29 марта 2011

Я еще не нашел подходящего учебника по libxml2, и поэтому я борюсь с некоторыми базовыми концепциями, имея «только» API документы , которые, ИМХО, немного слишком кратки в некоторые моменты.

Это (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 Ответ

3 голосов
/ 29 марта 2011

Похоже, что xmlTextWriterWriteBase64 () нужен контекст, где поместить текст. Мне удалось добавить текст в новый элемент с помощью xmlTextWriterStartElement (), xmlTextWriterWriteBase64 () и xmlTextWriterEndElement (). Можно подумать, что предоставление узла для xmlNewTextWriterTree () установит контекст, но, очевидно, это не так. «Документация» для libxml просто ужасна (даже примеры приложений); они дают вам как, но не почему. Я действительно не знаю ни одной хорошей документации; Я только что сам понял это методом проб и ошибок (грустно).

...