2010-03-16 143 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