【问题标题】:Read in DTD from memory using libxml2使用 libxml2 从内存中读取 DTD
【发布时间】:2023-04-11 12:25:01
【问题描述】:

我有一个 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);

但我收到解析器错误,抱怨

【问题讨论】:

    标签: c xml-parsing dtd libxml2


    【解决方案1】:

    您必须将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 替换为 appropriate encoding

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多