我正在使用 DIxml 解析几个 XML 文件。到目前为止效果很好。昨天我得到了一个似乎是正确的 XML 文件,但 DIxml 无法解析。我还没有实现警告、错误和致命错误功能,因为它从第一天开始就完美运行 :-)
我今天尝试实现这些函数,但我从 Delphi 收到一个编译器错误,说我的声明与预期的声明不同。从我的角度来看,我做得对,但我相信编译器知道得更好。
我实现了 SAX2 示例中所示的structuredError 方法,但我的源代码从未命中此函数。我现在所有的希望都寄托在致命错误方法上。
以下是有关该功能的一些其他详细信息。
由于该库是封闭源代码,因此我无法访问 pas 文件中的正确声明。当我用鼠标聚焦警告方法时,我只看到 hoover/tooltip 信息。
第一:我如何初始化 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 used Unit 'UnitSAX2_XML_Reader.pas' 无法编译