我正在使用DIxml来解析几个XML文件。到目前为止它工作得很好。昨天我得到了一个似乎正确的XML文件,但不能被DIxml解析。我还没有实施警告,错误和fatalerror功能,因为它从第一天开始就完美起作用了: - )
我今天尝试实现这些功能但是我从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'无法编译