对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;
答案 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)