0

最近、私の Fedora 16 は libxml2 を以前のバージョンから最新の rpm libxml2-2.7.8-8.fc16.i686 に自動アップグレードしましたが、突然 dtd 検証が DTD ファイルの宣言の欠落について不平を言い始めました。このアップグレードの前は、すべて正常に機能していました。もちろん、検証を無効にしても問題なく動作しますが、それは考えではありません。libxml2 を直接使用するのではなく、実際には libxml2 のラッパーである libxml++ を使用します。

この問題を引き起こす可能性のある 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 ファイルの 3 行目に問題があったため、その行を削除する必要がありました。そして今、きれいな出力が得られます。

したがって、自動アップグレードが実際にライブラリを台無しにした可能性があります。ソースから 2.7.8 をコンパイルすると、それが組み込まれ/usr/local、現在のインストールが上書きされます。その後、もう一度試すことができます。既存のインストールを修正する方法がわかりません。とにかく、2.7.8 リリースは、発生するエラーについて責任を負いません。

私のテストコマンドライン:xmllint ikku.xml -dtdvalid

簡単な考え: いくつかの問題のために、パーサーが別の dtd ファイルを考慮している可能性がありcatalogます。dtd ファイル名を変更してみてください。

于 2012-10-02T18:03:45.283 に答える