libxml2 2.7.8 / libxml ++ 2.35以及DTD验证的变化

时间:2012-10-02 16:26:46

标签: c++ fedora libxml2 fedora16

最近,我的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文件/消息。

1 个答案:

答案 0 :(得分:1)

但我使用的libxml 2.7.8(在Windows上)可以正确验证您的文件。没有消息。首先它在你的dtd文件的第三行抱怨..,所以我需要删除该行。现在它提供了一个干净的输出。

所以也许你的自动升级实际搞砸了图书馆。如果从源代码编译2.7.8,它将被放入/usr/local并覆盖您当前的安装。然后你可以再试一次。我不知道你怎么能尝试修复现有的安装。无论如何2.7.8版本不对你得到的错误负责。

我的测试命令行:xmllint ikku.xml -dtdvalid

快速思考:由于一些catalog问题,您的解析器可能会考虑另一个dtd文件。尝试更改dtd文件名。