libxml2 2.7.8/libxml++2.35以及DTD验证中的更改
libxml2 2.7.8 / libxml++ 2.35 and changes in DTD validation
最近,我的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">
任何人都有一些可能突然导致这种情况的指针,有没有人有这个版本中更改的指针/链接。这是一个已知的bug吗,有线索吗??
按照我的建议,我重新编译了(最新版本)libxml2,没有任何更改,我还重新编译了最新版本的libxml++(2.35-3),它现在很好地打印了错误的行号和列,但这就是所有更改。解析器仍然不接受我(以前接受的)xml文件/消息。
但是我使用的libxml 2.7.8(在Windows上)可以正确地验证您的文件。没有消息。首先,它在你的dtd文件的第三行抱怨..
,所以我需要删除那一行。现在它给出了一个干净的输出。
所以也许你的自动升级真的把图书馆搞砸了。如果您从源代码编译2.7.8,它将被放在/usr/local
中,并覆盖您当前的安装。然后你可以再试一次。我不知道你怎么能修复现有的安装。无论如何,2.7.8版本不对您所得到的错误负责。
我的测试命令行:xmllint ikku.xml -dtdvalid
快速思考一下:由于一些catalog
问题,您的解析器可能会考虑另一个dtd文件。尝试更改dtd文件名。
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- constexpr上下文中std::initializer_list的验证
- 正在验证c++中用户的整数输入
- 加密++验证大文件签名
- C++卡验证问题
- 验证指针链
- 此代码验证公式是什么意思?
- cin 的十进制输入验证?
- 简单的 HTML 验证器
- 密码长度验证 (c++)
- 输入验证以筛选出字符、字符串和一系列整数
- 如何使用 CredUIPromptForWindowsCredentials验证凭据
- 指针验证的最佳实践?
- RSA_PKCS1签名验证
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 使用 C++ 验证 NMEA 句子
- libxml2 2.7.8/libxml++2.35以及DTD验证中的更改