最近我的 Fedora 16 将 libxml2 从以前的版本自动升级到最新的 rpm libxml2-2.7.8-8.fc16.i686,突然 dtd 验证开始抱怨 DTD 文件中缺少声明。在此升级之前,一切正常。当然,当我禁用验证时,它也可以正常工作,但这不是想法。我不直接使用 libxml2,我实际上使用 libxml++,它是 libxml2 的包装器。
我试图搜索可能导致此问题的 libxml2 代码中的一些更改,但是 libxml2 站点上的最新更改以及 Fedora 站点上针对此软件包的更改并未提及 DTD 代码中的任何更改(在最近的版本中)
下面的 xml 消息突然不再有效:
<?xml version="1.0"?><!DOCTYPE MYAPP SYSTEM "myapp.dtd"><MYAPP><Command type="Connect"/></MYAPP>
它给出以下错误消息:
No declaration for attribute type of element Command
No declaration for element Command
No declaration for element MYAPP
这是我使用的 myapp.dtd 中的(剥离的)片段:
<!ELEMENT MYAPP (Command|Result)>
<!ELEMENT Command (Parameters?)>
<!ELEMENT Parameters (..a lot of other types and records..)>
<!ATTLIST Command type (None|
Connect|
Disconnect
) "None">
任何人都对可能突然导致这种情况的原因有一些指示,是否有人有此版本中更改的一些指示/链接。这是一个已知的错误,任何线索?
正如建议的那样,我重新编译了(最新版本)libxml2 并且没有任何更改,我还重新编译了最新版本的 libxml++(2.35-3),它现在可以很好地打印错误的行号和列,但这就是所有已经改变的. 解析器仍然不接受我的(以前接受的)xml 文件/消息。