libxml2 xmlParseFile无法加载格式良好的XML

时间:2011-12-29 11:35:51

标签: delphi file xml-parsing delphi-xe libxml2

对libxml2不熟悉我很困惑为什么xmlParseFile总是返回nil

uses
  libxml2;

procedure TForm1.FormCreate(Sender: TObject);
var
  doc: xmlDocPtr;
begin
  doc := xmlParseFile('1.xml'); // doc is nil
  doc := xmlParseFile('c:\1.xml'); // doc is again nil
end;

示例1.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
</root>

据报道,XML Spy 2007和xmllint工具都很好地构建了xml。

我使用来自http://xmlsoft.org的预编译DLL,并且在没有运气的情况下使用DelphiAPI-2.6.26和libxml2-pas-2-7-3-src尝试此代码。

我想我错过了什么?

调试器只是跳过该行,因为它指向外部引用,如下所示:

function xmlParseFile (const filename: PChar) : xmlDocPtr; cdecl; external LIBXML2_SO;

2 个答案:

答案 0 :(得分:2)

所有信用都归Remy所有,我会把答案代替他,让它关闭:

将Delphi包装器从PChar(XE和XE2中的PWideChar)更改为PAnsiChar解决了这个问题。一旦函数的定义改为

function xmlParseFile (const filename: PWideChar) : xmlDocPtr; cdecl; 
external LIBXML2_SO; 

它运作良好。

答案 1 :(得分:2)

我在github上创建了项目https://github.com/ak47morozov/Delphi-Libxml2

修复了Delphi XE2上的一些编码错误。 (PChar - &gt; PAnsiChar)