作爲新的libxml2我很困惑,爲什麼總是xmlParseFile返回nillibxml2的xmlParseFile無法加載一個格式良好的XML
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被報道爲由XML Spy 2007和xmllint工具組成。
我使用http://xmlsoft.org的預編譯DLL,並且用DelphiAPI-2.6.26和libxml2-pas-2-7-3-src嘗試此代碼,但沒有運氣。
我想我錯過了什麼?
調試器剛剛躍過線,因爲它指向一個外部參考這樣的:
function xmlParseFile (const filename: PChar) : xmlDocPtr; cdecl; external LIBXML2_SO;
調試器說什麼? – 2011-12-29 12:56:29
我一直在C++中使用libxml2多年,沒有任何問題,所以我不得不懷疑Delphi對libxml2的綁定可能存在問題。在libxml2.pas中如何聲明'xmlParseFile()'?真正的函數需要一個'PAnsiChar'作爲輸入。 libxml2.pas是否聲明'xmlParseFile()'使用'PAnsiChar'?這在Delphi XE中很重要,其中原生字符串類型是Unicode而不是Ansi。 – 2011-12-29 18:17:06
你說得對 - 將Delphi包裝從PChar(Xe和XE2中的PWideChar)更改爲PAnsiChar解決了這個問題。一旦函數的定義改爲函數xmlParseFile(const filename:PChar):xmlDocPtr; CDECL;外部LIBXML2_SO;它工作得很好。雷米請讓你評論一個我很樂意接受的答案。 – 2011-12-29 21:20:37