2013-10-24 32 views
1

我有一個dtd文件的char字符串,我需要一個xmlDtdPtr傳遞給xmlValidateDtd以及我的xml文檔。使用libxml2從內存中讀取DTD

隨着DTD在當前目錄中的文件我這樣做:

xmlParserCtxtPtr ctxt = xmlNewParserCtxt(); 
xmlDocPtr doc = xmlCtxtReadFile(ctxt, filename, NULL,0); 
xmlDtdPtr dtd = xmlParseDTD(NULL,(const xmlChar*)dtd_filename); 
xmlValidateDtd(&(ctxt->vctxt),doc,dtd); 

我嘗試這樣做:

XmlDocPtr dtd_doc = xmlReadMemory(dtd_string,sizeof(dtd_string),"blah.dtd",NULL,XML_PARSE_DTDLOAD); 
xmlDtdPtr dtd = xmlNewDtd(dtd_doc,NULL,NULL,NULL); 

,但我得到分析器錯誤抱怨<元素是一個無效的元素名稱。 我找不到任何有關如何從內存中正確解析DTD的好例子或文檔。

回答

1

你必須使用xmlIOParseDTDxmlParserInputBuffer

xmlParserInputBufferPtr buf = xmlParserInputBufferCreateMem(string, size, XML_CHAR_ENCODING_NONE); 
xmlDtdPtr dtd = xmlIOParseDTD(NULL, buf, XML_CHAR_ENCODING_NONE); 
xmlFreeParserInputBuffer(buf); 

更換XML_CHAR_ENCODING_NONEappropriate encoding如果DTD不包含文本聲明。