【问题标题】:Validating document in Xerces C++在 Xerces C++ 中验证文档
【发布时间】:2011-01-28 03:27:50
【问题描述】:

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

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

但如果文档无效,它并不表示错误。我错过了什么?

【问题讨论】:

    标签: c++ xml validation xerces xerces-c


    【解决方案1】:

    如果您想查看任何内容,您需要在调用 parse 之前set an error handler

    Handler handler;    
    parser.setErrorHandler( &handler );
    

    其中 Handler 是从ErrorHandler 派生的类

    【讨论】:

    • 我在代码中添加了错误处理程序。现在错误报告工作。但是,在解析我的 DTD 文件时,出现错误。这是我的 DTD 文件: 错误信息:致命错误:grammar.dtd: 2,3: Expected a markup declaration
    • @petersohn: 你的 DTD 没有指定 attr1 是什么类型的属性 [value|REQUIRED|IMPLIED|FIXED] 并且似乎没有结尾 ]> 无论如何,你可以尝试嵌入你的 Grammar.dtd 到 xmlfile.xml 并用 XMLNotepad 或类似工具打开 XML。
    • DTD 有个结尾,我只是忘了复制粘贴到这里。无论如何,将 #REQUIRED 添加到 attr1 并没有帮助,它会给出相同的错误消息。我有特定的理由不在 XML 文件中包含 DTD。不能以编程方式将 DTD 链接到 XML 吗?
    • 在 XML 中包含 DTD 并使用 XML 编辑器打开它是出于调试目的,通常这样的编辑器会给您提供更有意义的错误消息。将 XML 和 DTD 文件粘贴到 pastebin.com 或类似文件中,并将链接放在这里。
    • @TopGunCoder:就像答案中所说的“其中 Handler 是派生自 ErrorHandler 的类”。来自互联网的随机示例:sivachandranp.wordpress.com/2010/10/10/…。 HTH
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2011-08-17
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多