0

我正在使用 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' 无法编译

4

0 回答 0