2010-03-16 63 views
0

我想在Xerces-C++(版本2.8,Linux下)中加载XML文档,并使用未从文档引用的DTD模式对其进行验证。我尝试了以下方法:验证Xerces C++中的文档

XercesDOMParser parser; 
parser.loadGrammar("grammar.dtd", Grammar::DTDGrammarType); 
parser.setValidationScheme(XercesDOMParser::Val_Always); 
parser.parse("xmlfile.xml"); 

但是,如果文档无效,则不会显示错误。我错过了什么?

回答

2

,如果你想看到什么你需要set an error handler调用解析之前:

Handler handler;  
parser.setErrorHandler(&handler); 

其中处理器是我加的错误处理程序中的代码ErrorHandler

+0

派生的类。现在错误报告起作用了。但是,解析我的DTD文件时,出现错误。这是我的DTD文件: <?XML版本= “1.0” 编码= “UTF-8”?> <!DOCTYPE根[ !!! <!ATTLIST根attR2位CDATA #REQUIRED> 该错误消息: 致命错误: grammar.dtd:2,3:预期标记声明 – petersohn 2010-03-16 16:27:09

+0

@petersohn:你的DTD没有指定attr1是什么类型的属性[value | REQUIRED | IMPLIED | FIXED]并且似乎没有结尾]> Anyway ,你可以尝试嵌入你的gra将mmar.dtd导入到xmlfile.xml中,并使用XMLNotepad或类似软件打开XML。 – 2010-03-16 20:06:02

+0

DTD有一个结尾,我只是忘了复制粘贴在这里。无论如何,将#REQUIRED添加到attr1并没有帮助,它会提供相同的错误消息。我有特殊原因不要将DTD包含在XML文件中。是否不可能以编程方式将DTD链接到XML? – petersohn 2010-03-17 07:51:44