【问题标题】:Xerces dtd validation doesn't workXerces dtd 验证不起作用
【发布时间】:2013-02-07 18:20:43
【问题描述】:

我有一个要进行 XML 验证的 DTD 数据。 这是外部 DTD:

<!-- root element. must be there, must contain only one users element -->
<!ELEMENT root (users)>
<!-- users element contains user elements, one or more but can't have no elements-->
<!ELEMENT users (user)+>
<!--user element will include simple text only, no sub elements -->
<!ELEMENT user (#PCDATA)>

这里是 users.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<users>
    <user>some data</user>
    <user>some data</user>
    <user>some data</user>
</users>
</root>

创建解析器后,我要做的是验证:

Grammar* g= parser->loadGrammar("users.dtd",Grammar::DTDGrammarType,false);
parser->setValidationScheme(XercesDOMParser::Val_Auto);

现在,如果我使用 Val_Auto,一切正常。没有任何验证,我正在使用不同的文件,它没有捕获任何东西。如果我切换到 Val_Always,它总是会因上述文件而失败,并输出“没有为元素 'user' 找到声明”。 如果我在 xml 文件的标头中设置 DTD,如下所示: 它工作得很好。当然,我不能在现实世界中使用它,因为我需要在内存中(我从网络获取信息)。 我什至可以取消整个 loadGrammar 行,不会改变结果。

有什么想法吗?

【问题讨论】:

    标签: xml dtd xerces


    【解决方案1】:

    好的。似乎 DTD 与 Xerces 配合得不是很好。 但是,移动 xsd(更好的格式)并使用 catch 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2012-11-28
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      相关资源
      最近更新 更多