0

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

4

1 回答 1

1

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

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

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

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

于 2012-10-02T18:03:45.283 回答