如何使用libxml2(SAX解析器)使用内联DTD验证XML?

时间:2014-06-03 19:39:47

标签: xml libxml2 saxparser xml-dtd dtd-parsing

我正在使用libxml库在C ++中编写XML解析器,这需要我根据内联指定的DTD验证XML。我不想在我的程序中使用system()。否则我可以使用xmllint命令。

我遇到了http://xmlsoft.org/ API页面中指定的 xmlValidateDtd(xmlValidCtxtPtr ctxt,xmlDocPtr doc,xmlDtdPtr dtd)函数。但我觉得它是基于DOM的功能,因为在SAX解析中没有xmlDocPtr。

是否还有其他方法可以针对内联DTD验证XML文档?

1 个答案:

答案 0 :(得分:0)

通常,您只需提供XML_PARSE_DTDVALID解析器选项,因此在解析时将验证文档。

如果文档已经过解析而未经过验证,则可以使用xmlValidateDocument

int xmlValidateDocument (xmlValidCtxtPtr ctxt, 
                         xmlDocPtr doc)
  

尝试验证文档实例基本上它执行XML Rec描述的所有检查,即验证内部和外部子集(如果存在)并验证文档树。

     

ctxt:验证上下文
  doc:文档实例
  Returns: 1如果有效,否则为0