int main(int argc, char * argv[]) { xmlNodePtr sentence; gchar ** tokens; GString * linebuffer = g_string_new(""); GIOChannel * in = g_io_channel_unix_new(fileno(stdin)); //首先读取一行文字 g_io_channel_read_line_string(in,linebuffer,NULL,NULL); //分割 tokens = g_strsplit_set(linebuffer->str," ",1024); //为此行文字打标记 init_yylex(tokens); //打好词性标记后开始解析语法结构 xmlInitGlobals(); xmlInitMemory(); yyparse(&sentence); xmlCleanupGlobals(); xmlCleanupMemory(); xmlSaveCtxtPtr saver = xmlSaveToFd(2,"UTF-8",0); xmlSaveTree(saver,sentence); xmlSaveFlush(saver); xmlSaveClose(saver); write(2,"\n",1); //输出语法树, 以 XML 形式 return 0; }
bool XMLDocument::saveToHTMLFile(const std::string & filename, const bool indent) const { int ret; int options = XML_SAVE_AS_HTML; if (indent) { options |= XML_SAVE_FORMAT; } xmlThrDefIndentTreeOutput(1); xmlSaveCtxtPtr ctxt = xmlSaveToFilename(filename.c_str(), 0, options); ret = xmlSaveDoc(ctxt, document); xmlSaveFlush(ctxt); xmlSaveClose(ctxt); return ret != -1; }
bool CXmlTree::WriteXmlFileToString(cvs::string& string) const { xmlBufferPtr buffer = xmlBufferCreate(); if(!buffer) return false; xmlSaveCtxtPtr save = xmlSaveToBuffer(buffer, NULL, 0); if(!save) { xmlBufferFree(buffer); return false; } xmlSaveDoc(save, m_doc); xmlSaveFlush(save); xmlSaveClose(save); string = (const char*)xmlBufferContent(buffer); xmlBufferFree(buffer); return true; }
const std::string XMLDocument::dumpHTML(bool indent) const { xmlBuffer * buffer = xmlBufferCreate(); int ret; int options = XML_SAVE_AS_HTML; if (indent) { options |= XML_SAVE_FORMAT; } xmlThrDefIndentTreeOutput(1); xmlSaveCtxtPtr ctxt = xmlSaveToBuffer(buffer, 0, options); ret = xmlSaveDoc(ctxt, document); xmlSaveFlush(ctxt); xmlSaveClose(ctxt); std::string str((const char *)xmlBufferDetach(buffer)); xmlBufferFree(buffer); return str; }