簡體   English   中英

使用libxml2從內存中讀取DTD

[英]Read in DTD from memory using libxml2

我有一個dtd文件的char字符串,我需要一個xmlDtdPtr與我的xml文檔一起傳遞給xmlValidateDtd。

使用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);

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

您必須將xmlIOParseDTDxmlParserInputBuffer

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

如果您的DTD不包含文本聲明, XML_CHAR_ENCODING_NONE替換為適當的編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM