Xml Xerces dtd验证没有';行不通

Xml Xerces dtd验证没有';行不通,xml,dtd,xerces,Xml,Dtd,Xerces,我有一个DTD数据,我想用它进行XML验证。 以下是外部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 use

我有一个DTD数据,我想用它进行XML验证。 以下是外部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)>
现在,如果我使用的是Val_Auto任何东西都会发生。没有任何验证。所以,我使用不同的文件,但它没有捕获任何内容。如果我切换到Val_Always,则上面的文件总是会失败,输出“未找到元素“user”的声明”。 如果我在xml文件的头中设置DTD,如下所示:<!DOCTYPE root SYSTEM“users.dtd”>工作正常。当然,我不能在现实世界中使用它,因为我需要在内存中同时使用它们(我从网络中获取信息)。 我甚至可以取消整个loadGrammar行,不会更改结果


有什么想法吗?

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

<?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);