Xml 如果存在DTD DOCTYPE,Xerces将强制执行元素声明

Xml 如果存在DTD DOCTYPE,Xerces将强制执行元素声明,xml,ant,xsd-validation,dtd,xerces,Xml,Ant,Xsd Validation,Dtd,Xerces,我有以下XML文档: &傅; 我想根据以下XSD模式对其进行验证: 为此,我使用了一个小ANT脚本: 尽管XML结构对XSD有效,但我得到了以下错误: [schemavalidate] ...\src.xml:2:7: Elementtyp "root" muss deklariert werden. [schemavalidate] ...\src.xml:3:12: Elementtyp "child" muss deklariert we

我有以下XML文档:


&傅;
我想根据以下XSD模式对其进行验证:


为此,我使用了一个小ANT脚本:


尽管XML结构对XSD有效,但我得到了以下错误:

[schemavalidate] ...\src.xml:2:7: Elementtyp "root" muss deklariert werden.
[schemavalidate] ...\src.xml:3:12: Elementtyp "child" muss deklariert werden.
(原始消息,翻译后的意思是:
“元素类型”root“必须声明”

我想我知道会发生什么:Xerces找到DTD声明并尝试根据它验证XML。我需要关闭DTD验证(而不关闭完全验证),或者指定没有声明的元素或属性不会产生错误。我经常使用Xerces功能(),但没有找到令人满意的设置

谢谢你的帮助和提示

版本信息:

  • Java:1.8.0_211
  • 蚂蚁:1.9.13
  • Xerces:不确定,怎么知道
更新:找到我的Xerces版本:Xerces-J 2.7.1(对于ant,执行:


注意:我在这里使用的是Ant,但是如果您有Java解决方案,它可能也会有所帮助。

我认为您需要设置“schemaLanguage”属性。大概是这样的:

<project basedir="." name="schema-validation-test" default="test">
    <target name="test">
        <schemavalidate file="src.xml" noNamespaceFile="schema.xsd" failonerror="true">
            <property name="http://java.sun.com/xml/jaxp/properties/schemaLanguage" value="http://www.w3.org/2001/XMLSchema"/>
        </schemavalidate>
    </target>
</project>

致以最良好的祝愿,
屋大维就是这样!谢谢,屋大维!现在,当我知道我必须搜索哪个财产时,我在Xerces常见问题解答中也找到了关于这个问题: