私はDIxmlを使用していくつかのXMLファイルを解析しています。これまでのところ、それはうまくいきました。昨日、正しいように見えますが、DIxmlで解析できないXMLファイルを取得しました。初日から完全に機能したため、警告、エラー、致命的なエラー機能はまだ実装されていません:-)
今日、これらの関数を実装しようとしましたが、Delphiから、宣言が予期された宣言と異なるというコンパイラエラーが発生しました。私の観点からは、私はそれを正しく行いましたが、コンパイラーはもっとよく知っていると確信しています。
SAX2の例に示すようにstructuredErrorメソッドを実装しましたが、ソースがこの関数にヒットすることはありません。私の望みはすべて、致命的なエラーメソッドにあります。
関数に関する追加の詳細は次のとおりです。
ライブラリはクローズドソースであるため、pasファイルの正しい宣言にアクセスできません。警告メソッドをマウスでフォーカスすると、フーバー/ツールチップの情報のみが表示されます。
最初:SAXリーダー(その一部)を初期化する方法
var
f8 : Utf8String;
User : TImportData;
begin
User := TImportData.Create;
xmlInitParser; // Initialize the XML library.
{ Initialize the SAX2 handler. To start off with, we set all functions to
nil. If we use a nil SAX parser like this, then we will have a parser that
only checks that the document is well formed. }
FillChar(FSaxHandler, SizeOf(FSaxHandler), 0);
{ By adding a few callbacks to the SAX handler, we can get the parser
to do just about anything. }
FSaxHandler.startDocument := SaxStartDocument;
FSaxHandler.endDocument := SaxEndDocument;
FSaxHandler.characters := SaxCharacters;
FSaxHandler.Warning := Warning;
FSaxHandler.Error := Error;
FSaxHandler.fatalError := fatalError;
end;
procedure SaxStartDocument(Ctx: Pointer);
var
User: PImportData;
begin
User := Ctx;
//Do something with user...
end;
procedure Warning(Ctx: Pointer; Msg: PAnsiChar);
var
User: PImportData;
begin
User := Ctx;
//Do something with user...
end;
procedure SaxCharacters(Ctx: Pointer; const Ch: xmlCharPtr; Len: Integer);
var
s: Utf8String;
var
User: PImportData;
begin
User := Ctx;
//Do something with user...
end;
マウスで線の焦点を合わせるFSaxHandler.characters := Warning;
と、ツールチップウィンドウのようなもので次の情報が表示されます。
DIXml.xmlSAXHandlerのDeklariert
Parameters Ctx System.Pointer Msg System.PAnsiChar
ラインに焦点を合わせるとFSaxHandler.characters := SaxCharacters;
、次のツールチップが表示されます
DIXml.xmlSAXHandlerの文字イベントDeklariert
Parameters Ctx System.Pointer Ch System.PAnsiChar Len System.Integer
Ctrl + F9キーを押してソースをコンパイルすると、次のエラーメッセージが表示されます。
[DCC Fehler] UnitSAX2_XML_Reader.pas(247):E2009 Inkompatible Typen:'Unterschiede in der Aufrufkonvention'
[DCC Fataler Fehler] importObjects.pas(8):F2063 Verwendete Unit'UnitSAX2_XML_Reader.pas' kann nicht compiliert werden
これは翻訳されたことを意味します
[DCCエラー]UnitSAX2_XML_Reader.pas(247):E2009互換性のないタイプ:'呼び出し定義の違い'
[DCC致命的エラー]importObjects.pas(8):F2063使用ユニット'UnitSAX2_XML_Reader.pas'をコンパイルできません