2017-01-10 4 views
2

私はHTML文字列を解析して再度書き出しようとしています(簡潔にするため、私は実行したい変換を省略しています)。`htmlDocPtr`を文字列に書く

#include <iostream> 
#include <libxml/HTMLparser.h> 

static const char *html = "<!DOCTYPE html><html><head></head><body><div></div></body></html>"; 

int main(int argc, const char * argv[]) { 
    xmlChar *buff; 
    int buffersize; 

    htmlDocPtr doc = htmlReadMemory(html, (unsigned)strlen(html), "noname.html", NULL, 0); 
    xmlDocDumpFormatMemory(doc, &buff, &buffersize, 1); 

    printf("%s", (char *) buff); 

    xmlFree(buff); 
    xmlFreeDoc(doc); 

    return 0; 
} 

(私はほぼ100%の緑の午前中にC++の土地 - すべてのoutlayingエラーを言い訳してください)

このすべての作品(その中でそれが出てエラーしない)が、XMLとしてxmlDocDumpFormatMemory扱いツリーとそれに応じて出力されます:

<?xml version="1.0" standalone="yes"?> 
<!DOCTYPE html> 
<html> 
    <head/> 
    <body> 
    <div/> 
    </body> 
</html> 

ご覧のとおり、doctypeの上にXML宣言が追加され、空のタグは自動的に閉じられました。私が知る限り、htmlDocDumpFormatMemoryはありません - 使用できるオプションまたは代替機能はありますか?

答えて

3

次のコードを試してください。これは、例えば、のようoptionsを通過させる(この場合xmlSaveToBufferxmlSaveToXXXX -functions、を利用するXML_SAVE_NO_DECL

#include <iostream> 
#include <libxml/HTMLparser.h> 
#include <libxml/xmlsave.h> 

static const char *html = "<!DOCTYPE html><html><head></head><body><div></div></body></html>"; 

int main(int argc, const char * argv[]) { 

    htmlDocPtr doc = htmlReadMemory(html, (unsigned)strlen(html), "noname.html", NULL, 0); 

    xmlBufferPtr buffer = xmlBufferCreate(); 
    if (buffer == NULL) 
     return 1; // Add error handling... 

    xmlSaveCtxtPtr saveCtxtPtr = xmlSaveToBuffer(buffer,NULL, XML_SAVE_NO_DECL); 
    if (xmlSaveDoc(saveCtxtPtr, doc) < 0) 
     return 1; // Add error handling 

    xmlSaveClose(saveCtxtPtr); 

    const xmlChar *xmlCharBuffer = xmlBufferContent(buffer); 

    printf("%s", xmlCharBuffer); 

    xmlBufferFree(buffer); 
    xmlFreeDoc(doc); 

    return 0; 
} 

これは以下の出力を生成するには:

<!DOCTYPE html> 
<html><head></head><body><div></div></body></html> 
+0

ように働い魅惑的な**魅力**、そしてまったく別の質問になる私の空白を保存しました! –

+0

「XML_SAVE_AS_HTML」や「XML_SAVE_XHTML」のような[便利なオプション](http://www.xmlsoft.org/html/libxml-xmlsave.html#xmlSaveOption)もあります。 – nwellnhof

関連する問題