2014-07-22 47 views
0

我有以下的,很简单的XML文件(显著削减从原来的回这个问题的目的):实体引入氧引起的Xerces“元素类型...必须声明”的错误

<?xml version="1.0"?> 
    <!DOCTYPE root [ 
    <!ENTITY % entities SYSTEM "test.dtd"> 
    %entities; 
    ]> 

    <root> 
    </root> 

存在文件test.dtd,但同样为了这个问题的目的,它是空的。

麻烦的是,氧XML编辑器引发错误:

E [Xerces] Element type "root" must be declared. 

如果我删除%entities;线或从上面的线%符号,不会引发错误,因为氧气则是不实际解析实体文件(很明显,当引入真正的实体时,引用它们失败)。不幸的是,我所做的研究表明,Xerces由于多种不同的原因而抛出了这个错误,我无法缩小这种情况下的错误。

为什么在引入实体时会抛出此错误,即使这些实体没有,我该怎么办?

氧气10.3,如果该事项(我公司只授权给五岁的软件:-()

+0

你怎么没有得到“没有与文档相关的模式或DTD”。当你尝试验证错误?上面的示例没有出现任何格式错误,但它肯定无法验证,因为没有DTD/Schema来验证。如果我将<!ELEMENT root(#PCDATA)>'添加到内部子集中,它会验证正确(使用空的'test.dtd')。 (这是在oxygen 15.) –

+0

不知道为什么我没有得到那个错误。我并没有真正尝试验证(除了连续自动验证oXygen做),但我的XML知识不是很好,我不明白为什么添加空实体导致它引发错误。 我怀疑问题是在oXygen中的一些设置 - Microsoft XML记事本2007(它与我和旧软件?!;有什么关系)处理它很好。 – AJR

回答

0

The file test.dtd exists but, again for the purposes of this question, is empty.

你只是得到这个错误,因为即使文件test.dtd正确发现,它不包含任何东西,特别是没有为“根”元素没有声明这样的Xerces抛出你的错误:

E [Xerces] Element type "root" must be declared.

如果你简单地声明<!DOCTYPE root SYSTEM "test.dtd">(这是stricly相当于你什么上面已经完成),我敢打赌你会得到同样的错误。

相关问题