libxml2 2.7.8 / libxml ++ 2.35 и изменения в проверке DTD

Недавно моя 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-файл / сообщение.

0

Решение

Но libxml 2.7.8 (в Windows), который я использую, правильно проверяет ваш файл. Нет сообщений. Сначала жаловались на .. в третьей строке вашего файла dtd, поэтому мне нужно было удалить эту строку. И теперь это дает чистый вывод.

Так что, возможно, ваше автоматическое обновление действительно испортило библиотеку. Если вы компилируете 2.7.8 из исходного кода, он будет помещен в /usr/local и переопределит вашу текущую установку. Тогда вы могли бы попробовать еще раз. Я не знаю, как вы могли бы попытаться исправить существующую установку. В любом случае релиз 2.7.8 не несет ответственности за ошибки, которые вы получаете.

Моя тестовая командная строка: xmllint ikku.xml -dtdvalid

Быстрая мысль: возможно, ваш парсер принимает во внимание другой файл dtd из-за некоторых catalog проблемы. Попробуйте изменить имя файла dtd.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]